ZOJ 2803 - Crashing Robots

 1  /*  Accepted 2803 C++ 00:00.02 880K  */
 2  #include  < iostream >
 3 
 4  using   namespace  std;
 5 
 6  int  main()
 7  {
 8       int  N;
 9      cin  >>  N;
10       while (N -- )
11      {
12           int  a, b, n, m;
13          
14           int  px[ 101 ];
15           int  py[ 101 ];
16           int  dir[ 101 ];
17          
18           int  map[ 101 ][ 101 =  {  0  };
19          
20          cin  >>  a  >>  b  >>  n  >>  m;
21           for ( int  i  =   1 ; i  <=  n; i ++ )
22          {
23               char  c;
24              cin  >>  px[i]  >>  py[i]  >>  c;
25              map[px[i]][py[i]]  =  i;
26               switch (c)
27              {
28                   case   ' N '  : dir[i]  =   0 break ;
29                   case   ' E '  : dir[i]  =   1 break ;
30                   case   ' S '  : dir[i]  =   2 break ;
31                   case   ' W '  : dir[i]  =   3 break ;
32              }
33          }
34          
35           bool  ok  =   true ;
36           for ( int  i  =   0 ; i  <  m; i ++ )
37          {
38               int  robot;  char  action;  int  repeat;
39              
40              cin  >>  robot  >>  action  >>  repeat;
41           
42               if (ok  ==   false )
43                   continue ;
44              
45               if (action  ==   ' L '   ||  action  ==   ' R ' )
46              {
47                  repeat  %=   4 ;
48                   if (action  ==   ' L ' )
49                      dir[robot]  =  (dir[robot]  -  repeat  +   4 %   4 ;
50                   if (action  ==   ' R ' )
51                      dir[robot]  =  (dir[robot]  +  repeat)  %   4 ;
52                   continue ;
53              }
54               // action == 'F'
55               while (repeat -- )
56              {
57                   int  x  =  px[robot];
58                   int  y  =  py[robot];
59                  
60                  map[x][y]  =   0 ;
61                   switch (dir[robot])
62                  {
63                       case   0  : y ++ break ;
64                       case   1  : x ++ break ;
65                       case   2  : y -- break ;
66                       case   3  : x -- break ;
67                  }
68                   if (map[x][y])
69                  {
70                      cout  <<   " Robot  "   <<  robot
71                            <<   "  crashes into robot  "   <<  map[x][y]  <<  endl;
72                       break ;
73                  }
74                   if (x  ==   0   ||  x  ==  a  +   1   ||  y  ==   0   ||  y  ==  b  +   1 )
75                  {
76                      cout  <<   " Robot  "   <<  robot  <<   "  crashes into the wall "   <<  endl;
77                       break ;
78                  }
79                  px[robot]  =  x;
80                  py[robot]  =  y;
81                  map[x][y]  =  robot;
82              }
83               if (repeat  !=   - 1 )
84                  ok  =   false ;
85          }
86           if (ok)
87              cout  <<   " OK "   <<  endl;
88      }
89      
90       return   0 ;
91  }
92 

你可能感兴趣的:(ZOJ 2803 - Crashing Robots)