Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
题目中测试数据过来,但是一直WA,哪位大神麻烦帮忙看看哪里出问题了#include <cstdio> #include <cstring> const int MAX = 110; int wh[MAX][MAX];//dr[i][j]表示在位置i,j上的机器人编号 int A,B; char dr[MAX];//dr[i]为i号机器人的当前方向 char dd[] = {'N','E','S','W'}; struct location{ int x; int y; }robloc[MAX];//记录每个机器人当前位置 //rob机器人编号,face朝向,times次数 //go函数用来计算机器人是否可以朝前走times步 //成功返回0,撞墙-1,撞到其他机器人则放回走的步数(走了多少步后撞到其他人) int go(int rob,char face,int times){ int orgx = robloc[rob].x; int orgy = robloc[rob].y; int curx = orgx; int cury = orgy; for(int i=1;i<=times;i++){ switch(face){ case 'N': if(cury==B){ return -1; } cury++; if(wh[curx][cury]) return i; break; case 'S': if(cury==1) return -1; cury--; if(wh[curx][cury]) return i; break; case 'W': if(curx==1) return -1; curx--; if(wh[curx][cury]) return i; break; case 'E': if(curx==A) return -1; curx++; if(wh[curx][cury]) return i; break; } } wh[curx][cury] = rob; robloc[rob].x = curx; robloc[rob].y = cury; wh[orgx][orgy] = 0; return 0; } //处理单条指令 //返回,与go函数相同 int process(int rob,char action,int times){ switch(action){ case 'F': //朝前走,调用go() return go(rob,dr[rob],times); case 'L': //左转,改变机器人方向 if(times%4==0) return 0; switch(dr[rob]){ case 'N': dr[rob] = dd[4-times%4]; break; case 'E': dr[rob] = dd[(5-times%4)%4]; break; case 'S': dr[rob] = dd[(6-times%4)%4]; break; case 'W': dr[rob] = dd[(7-times%4)%4]; break; } return 0; case 'R': switch(dr[rob]){ case 'N': dr[rob] = dd[times%4]; break; case 'E': dr[rob] = dd[(times+1)%4]; break; case 'S': dr[rob] = dd[(times+2)%4]; break; case 'W': dr[rob] = dd[(times+3)%4]; break; } return 0; } } int main(void){ int cs; scanf("%d",&cs); while(cs--){ memset(wh,0,sizeof(wh)); memset(dr,0,sizeof(dr)); scanf("%d%d",&A,&B); int N,M; scanf("%d%d",&N,&M); int x,y; for(int i=1;i<=N;i++){ scanf("%d%d",&x,&y); wh[x][y] = i; robloc[i].x = x; robloc[i].y = y; getchar(); scanf("%c",&dr[i]); } int i; int rob; char action; int times; int flag=1; for(i=1;i<=M;i++){ scanf("%d",&rob); getchar(); scanf("%c",&action); scanf("%d",×); int result = process(rob,action,times); if(result == 0) continue ; else if(result==-1){ flag = 0; printf("Robot %d crashes into the wall\n",rob); break; } else{ flag = 0; int x = robloc[rob].x; int y = robloc[rob].y; switch(dr[rob]){ case 'N': y+=result; break; case 'S': y-=result; break; case 'W': x-=result; break; case 'E': x+=result; break; } printf("Robot %d crashes into robot %d\n",rob,wh[x][y]); } } if(flag) printf("OK\n"); else{ while(i<M){ scanf("%d",&rob); getchar(); scanf("%c",&action); scanf("%d",×); i++; } } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator