题目:点击打开链接
大模拟题,值得敲敲,虽然很痛苦,需要注意的是模拟要一步一步进行,否则就WA得多少次啊。。。
下面是AC代码,很长,凑合看吧,以后会精简。。。
#include <stdio.h> int main() { int _k,num,order,x,y,x_cur[110],y_cur[110]; int robot[110],repeat[110]; char face_cur[110],action[110]; int i,j; int robot_num,k,step,flag; scanf("%d",&_k); while(_k--) { scanf("%d %d",&x,&y); scanf("%d %d",&num,&order); for(i=1;i<=num;i++) scanf("%d %d %c",&x_cur[i],&y_cur[i],&face_cur[i]); for(i=1;i<=order;i++) scanf("%d %c %d",&robot[i],&action[i],&repeat[i]); flag=0; for(i=1;i<=order;i++) { robot_num=robot[i]; switch(action[i]) { case 'L':if(face_cur[robot_num]=='N') { k=repeat[i]%4; if(k==1) face_cur[robot_num]='W'; else if(k==2) face_cur[robot_num]='S'; else if(k==3) face_cur[robot_num]='E'; } else if(face_cur[robot_num]=='E') { k=repeat[i]%4; if(k==1) face_cur[robot_num]='N'; else if(k==2) face_cur[robot_num]='W'; else if(k==3) face_cur[robot_num]='S';//face_cur[robot_num]='E'; } else if(face_cur[robot_num]=='S') { k=repeat[i]%4; if(k==1) face_cur[robot_num]='E'; else if(k==2) face_cur[robot_num]='N'; else if(k==3) face_cur[robot_num]='W'; } else if(face_cur[robot_num]=='W') { k=repeat[i]%4; if(k==1) face_cur[robot_num]='S'; else if(k==2) face_cur[robot_num]='E'; else if(k==3) face_cur[robot_num]='N'; } break; case 'R':if(face_cur[robot_num]=='N') { k=repeat[i]%4; if(k==1) face_cur[robot_num]='E'; else if(k==2) face_cur[robot_num]='S'; else if(k==3) face_cur[robot_num]='W'; } else if(face_cur[robot_num]=='E') { k=repeat[i]%4; if(k==1) face_cur[robot_num]='S'; else if(k==2) face_cur[robot_num]='W'; else if(k==3) face_cur[robot_num]='N'; } else if(face_cur[robot_num]=='S') { k=repeat[i]%4; if(k==1) face_cur[robot_num]='W'; else if(k==2) face_cur[robot_num]='N'; else if(k==3) face_cur[robot_num]='E'; } else if(face_cur[robot_num]=='W') { k=repeat[i]%4; if(k==1) face_cur[robot_num]='N'; else if(k==2) face_cur[robot_num]='E'; else if(k==3) face_cur[robot_num]='S'; } break; case 'F':step=repeat[i]; switch(face_cur[robot_num]) { case 'N':while(step--) { y_cur[robot_num]++; if(y_cur[robot_num]==y+1) { flag=1; printf("Robot %d crashes into the wall\n",robot_num); break; } else { for(j=1;j<=num;j++) if(j==robot_num) ; else if(x_cur[j]==x_cur[robot_num] && y_cur[j]==y_cur[robot_num]) break; if(j<=num) { flag=2; printf("Robot %d crashes into robot %d\n",robot_num,j); break; } } } break; case 'E':while(step--) { x_cur[robot_num]++; if(x_cur[robot_num]==x+1) { flag=1; printf("Robot %d crashes into the wall\n",robot_num); break; } else { for(j=1;j<=num;j++) if(j==robot_num) ; else if(x_cur[j]==x_cur[robot_num] && y_cur[j]==y_cur[robot_num]) break; if(j<=num) { flag=2; printf("Robot %d crashes into robot %d\n",robot_num,j); break; } } } break; case 'S':while(step--) { y_cur[robot_num]--; if(y_cur[robot_num]==0) { flag=1; printf("Robot %d crashes into the wall\n",robot_num); break; } else { for(j=1;j<=num;j++) if(j==robot_num) ; else if(x_cur[j]==x_cur[robot_num] && y_cur[j]==y_cur[robot_num]) break; if(j<=num) { flag=2; printf("Robot %d crashes into robot %d\n",robot_num,j); break; } } } break; case 'W':while(step--) { x_cur[robot_num]--; if(x_cur[robot_num]==0) { flag=1; printf("Robot %d crashes into the wall\n",robot_num); break; } else { for(j=1;j<=num;j++) if(j==robot_num) ; else if(x_cur[j]==x_cur[robot_num] && y_cur[j]==y_cur[robot_num]) break; if(j<=num) { flag=2; printf("Robot %d crashes into robot %d\n",robot_num,j); break; } } } break; } } if(flag>0) break; } if(i>order) printf("OK\n"); } return 0; }