Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 7284 | Accepted: 3200 |
Description
Input
Output
Sample Input
4 5 4 2 2 1 1 E 5 4 W 1 F 7 2 F 7 5 4 2 4 1 1 E 5 4 W 1 F 3 2 F 1 1 L 1 1 F 3 5 4 2 2 1 1 E 5 4 W 1 L 96 1 F 2 5 4 2 3 1 1 E 5 4 W 1 F 4 1 L 1 1 F 20
Sample Output
Robot 1 crashes into the wall Robot 1 crashes into robot 2 OK Robot 1 crashes into robot 2
Source
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> typedef struct node { int x,y,direct; }robot; robot a[105]; int b[105][105],k,ta,tb,n,m; int tx,ty,rnumb,repeat; char tdirect,commd; int p; void init() { int i,j; scanf("%d%d%d%d",&tb,&ta,&n,&m); memset(b,0,sizeof(b)); for(i=1;i<=n;i++) { scanf("%d%d",&ty,&tx); getchar(); scanf("%c",&tdirect); getchar(); a[i].x=ta+1-tx; a[i].y=ty; switch(tdirect) { case'N':a[i].direct=0;break; case'E':a[i].direct=1;break; case'S':a[i].direct=2;break; case'W':a[i].direct=3;break; default:break; }; b[a[i].x][a[i].y]=i; } p=0; } void dol() { int i,j; for(i=0;i<repeat;i++) { a[rnumb].direct--; if(a[rnumb].direct<0) a[rnumb].direct+=4; } } void dor() { int i,j; for(i=0;i<repeat;i++) { a[rnumb].direct=(a[rnumb].direct+1)%4; } } void dof() { int i,j; int tem; for(i=0;i<repeat;i++) { if(!p) { switch(a[rnumb].direct) { case 0: tem=--a[rnumb].x; if(tem==0) { p=1; printf("Robot %d crashes into the wall\n",rnumb); } else { if(b[tem][a[rnumb].y]>0) { p=1; printf("Robot %d crashes into robot %d\n",rnumb,b[tem][a[rnumb].y]); } else { b[tem][a[rnumb].y]=b[tem+1][a[rnumb].y]; b[tem+1][a[rnumb].y]=0; } } break; case 2: tem=++a[rnumb].x; if(tem==ta+1) { p=1; printf("Robot %d crashes into the wall\n",rnumb); } else { if(b[tem][a[rnumb].y]>0) { p=1; printf("Robot %d crashes into robot %d\n",rnumb,b[tem][a[rnumb].y]); } else { b[tem][a[rnumb].y]=b[tem-1][a[rnumb].y]; b[tem-1][a[rnumb].y]=0; } } break; case 3: tem=--a[rnumb].y; if(tem==0) { p=1; printf("Robot %d crashes into the wall\n",rnumb); } else { if(b[a[rnumb].x][tem]>0) { p=1; printf("Robot %d crashes into robot %d\n",rnumb,b[a[rnumb].x][tem]); } else { b[a[rnumb].x][tem]=b[a[rnumb].x][tem+1]; b[a[rnumb].x][tem+1]=0; } } break; case 1: tem=++a[rnumb].y; if(tem==tb+1) { p=1; printf("Robot %d crashes into the wall\n",rnumb); } else { if(b[a[rnumb].x][tem]>0) { p=1; printf("Robot %d crashes into robot %d\n",rnumb,b[a[rnumb].x][tem]); } else { b[a[rnumb].x][tem]=b[a[rnumb].x][tem-1]; b[a[rnumb].x][tem-1]=0; } } break; default:break; }; } } } void comput() { int i,j; while(m--) { scanf("%d",&rnumb); getchar(); scanf("%c",&commd); getchar(); scanf("%d",&repeat); if(!p) { switch(commd) { case'L': dol(); break; case'R': dor(); break; case'F': dof(); break; default:break; } } } } int main() { int i,j; while(scanf("%d",&k)!=EOF) { while(k--) { init(); comput(); if(!p) printf("OK\n"); } } return 0; }