唉,离AC只有一步之遥,偏偏#1测试点WA,#6测试点TLE,这是怎么回事?
话不多说,先给各位大佬献上代码:
#include"stdio.h"
char m[10][10],sm[10][10],fd='n',cd='n';
int fx,fy,cx,cy,time_/*time貌似是C++的关键字*/;
void turn(char &d){
switch(d){
case 'n':
d='e';
break;
case 'e':
d='s';
break;
case 's':
d='w';
break;
case 'w':
d='n';
break;
}
}
bool in(int x,int y){
return x>=0&&x<10&&y>=0&&y<10;
}
bool move(void){
bool meet=0;
int ftx,fty,ctx,cty;
switch(fd){
case 'n':
ftx=fx-1;
fty=fy;
break;
case 'e':
ftx=fx;
fty=fy+1;
break;
case 's':
ftx=fx+1;
fty=fy;
break;
case 'w':
ftx=fx;
fty=fy-1;
break;
}
switch(cd){
case 'n':
ctx=cx-1;
cty=cy;
break;
case 'e':
ctx=cx;
cty=cy+1;
break;
case 's':
ctx=cx+1;
cty=cy;
break;
case 'w':
ctx=cx;
cty=cy-1;
break;
}
if(!in(ftx,fty)||m[ftx][fty]=='*')
turn(fd);
else{
m[ftx][fty]='F';
m[fx][fy]='.';
fx=ftx;
fy=fty;
}
if(!in(ctx,cty)||m[ctx][cty]=='*')
turn(cd);
else{
if(m[ctx][cty]=='F')
meet=1;
m[ctx][cty]='C';
m[cx][cy]=(m[cx][cy]=='F'?'F':'.');
cx=ctx;
cy=cty;
}
time_++;
return meet;
}
int main(void){
for(int i=0;i<10;i++){
scanf("%s",m[i]);
for(int j=0;j<10;j++)
sm[i][j]=m[i][j];
}
for(int i=0;i<10;i++)
for(int j=0;j<10;j++){
if(m[i][j]=='F'){
fx=i;
fy=j;
}
if(m[i][j]=='C'){
cx=i;
cy=j;
}
}
while(1){
if(move()){
printf("%d",time_);
return 0;
}
bool flag=1;
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
if(m[i][j]!=sm[i][j]){
flag=0;
goto out;
}
printf("0");
return 0;
out:;
}
return 0;
}