http://poj.org/problem?id=2632
1 #include<stdio.h> 2 #define N 110 3 struct rob 4 { 5 int x,y,d; 6 }rob[N]; 7 struct move 8 { 9 int id,act,rep; 10 }mrob[N]; 11 12 int n,m,nums,moves; 13 14 int f[N][N]; 15 16 void input() 17 { 18 int i,j; 19 scanf("%d %d",&m,&n); 20 for(i=1;i<=n;i++) 21 { 22 for(j=1;j<=m;j++) 23 f[i][j]=0; 24 } 25 char c; 26 scanf("%d %d",&nums,&moves); 27 for(i=1;i<=nums;i++) 28 { 29 scanf("%d %d %c",&rob[i].y,&rob[i].x,&c); 30 f[rob[i].x][rob[i].y]=i; 31 switch(c) 32 { 33 case 'S':rob[i].d=0;break; 34 case 'E':rob[i].d=1;break; 35 case 'N':rob[i].d=2;break; 36 case 'W':rob[i].d=3;break; 37 } 38 } 39 for(i=1;i<=moves;i++) 40 { 41 scanf("%d %c %d",&mrob[i].id,&c,&mrob[i].rep); 42 switch(c) 43 { 44 case 'L':mrob[i].act=1;break; 45 case 'R':mrob[i].act=2;break; 46 case 'F':mrob[i].act=3;break; 47 } 48 } 49 } 50 void ouput(int a,int b,int c) 51 { 52 if(c==1) 53 printf("Robot %d crashes into the wall ",a); 54 else 55 printf("Robot %d crashes into robot %d ",a,b); 56 } 57 int move(int id,int x1,int y1,int c) 58 { 59 int x=rob[id].x; 60 int y=rob[id].y; 61 f[x][y]=0; 62 for(int i=0;i<c;i++) 63 { 64 x+=x1; 65 y+=y1; 66 if(x<1||x>n||y<1||y>m) 67 { 68 ouput(id,0,1); 69 return 0; 70 } 71 if(f[x][y]!=0) 72 { 73 ouput(id,f[x][y],2); 74 return 0; 75 } 76 } 77 f[x][y]=id; 78 rob[id].x=x; 79 rob[id].y=y; 80 return 1; 81 } 82 int change(int a,int b,int c) 83 { 84 switch(b) 85 { 86 case 1:rob[a].d=(rob[a].d+c)%4;break; 87 case 2:rob[a].d=(rob[a].d+3*c)%4;break; 88 case 3: 89 switch(rob[a].d) 90 { 91 case 0: 92 if(!move(a,-1,0,c)) 93 return 0; 94 break; 95 case 1: 96 if(!move(a,0,1,c)) 97 return 0; 98 break; 99 case 2: 100 if(!move(a,1,0,c)) 101 return 0; 102 break; 103 case 3: 104 if(!move(a,0,-1,c)) 105 return 0; 106 break; 107 } 108 break; 109 } 110 return 1; 111 } 112 void solve() 113 { 114 int i; 115 for(i=1;i<=moves;i++) 116 { 117 if(!change(mrob[i].id,mrob[i].act,mrob[i].rep)) 118 return; 119 } 120 printf("OK "); 121 } 122 int main() 123 { 124 int t; 125 scanf("%d",&t); 126 while(t--) 127 { 128 input(); 129 solve(); 130 } 131 return 0; 132 }
破模拟,做的哥哥要吐。。。。