这是测试点#1在我本地(Windows x64 gcc 10.3.0 (tdm64-1))的输出:
58
这是下载的文件P1518_1.out的内容:
58
这是评测的错误信息:
wrong answer On line 1 column 1, read 0, expected 5.
怎么会输出0?
提交之后有4个RE、其他全是WA
我的代码:
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cmath>
#include <algorithm>
#define SIZE 12
#define f(s,e,val) for(int (val)=(s);(val)<(e);(val)++)
#define conv(x,y,n) ((x)+(y)*n)
#define cv10(x,y) ((x)+(y)*SIZE)
#define betw(mi,n,ma) (((mi)<=(n))&&((n)<=(ma)))
struct{
int dx,dy;
}cmds[4]={{0,-1},{1,0},{0,1},{-1,0}/*front,right,back,left*/};
inline int check(int inp){
return inp%4;
};
char map[SIZE*SIZE];
bool history[10000000];
int main(){
#ifdef LOCALTEST
freopen("in", "r", stdin);
freopen("out", "w", stdout);
#endif
char inp;
int fx,fy,cx,cy,mns=0,tx,ty,fs=0,cs=0,ofx,ofy,ocx,ocy;
f(1,11,y){
f(1,11,x){
inp = getchar();
map[cv10(x,y)]=inp;
switch(inp){
case('C'):
ocx=cx=x,ocy=cy=y;
break;
case('F'):
ofx=fx=x,ofy=fy=y;
break;
default:
break;
};
};
getchar();
};
for(int y:{0,11}){
f(0,12,x){
map[cv10(x,y)]='*';
};
};
for(int x:{0,11}){
f(0,12,y){
map[cv10(x,y)]='*';
};
};
while(1){
//移动:牛
tx=cx+cmds[cs].dx;
ty=cy+cmds[cs].dy;
if(map[cv10(tx,ty)]=='*'){
cs=check(cs+1);
}else{
ocx=cx;ocy=cy;
cx=tx;cy=ty;
};
tx=fx+cmds[fs].dx;
ty=fy+cmds[fs].dy;
if(map[cv10(tx,ty)]=='*'){
fs=check(fs+1);
}else{
ofx=fx;ofy=fy;
fx=tx;fy=ty;
};
mns++;
//移动后判断
if((fx==cx)&&(fy==cy)){
printf("%d",mns);
return 0;
}else{
//记录
long long temp = 0;
temp+=cx+cy*10;
temp+=fx*100LL+fy*1000LL;
temp+=fs*10000LL+cs*100000LL;
if(history[temp]){
printf("0");
return 0;
};
history[temp]=true;
};
};
// f(0,12,y){
// f(0,12,x){
// putchar(map[cv10(x,y)]);
// };
// putchar('\n');
// };
// printf("%d %d %d %d",fx,fy,cx,cy);
return 0;
}