poj2632

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\n",a);
 54     else
 55         printf("Robot %d crashes into robot %d\n",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\n");
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 }
View Code

破模拟,做的哥哥要吐。。。。

posted @ 2013-08-06 10:53  海东青飞吧!  阅读(242)  评论(0编辑  收藏  举报