superman

聚精会神搞建设 一心一意谋发展
posts - 190, comments - 17, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

ZOJ 2803 - Crashing Robots

Posted on 2008-05-26 10:41 superman 阅读(231) 评论(0)  编辑 收藏 引用 所属分类: ZOJ
 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] = 0break;
29                 case 'E' : dir[i] = 1break;
30                 case 'S' : dir[i] = 2break;
31                 case 'W' : dir[i] = 3break;
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 

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理