Posted on 2008-05-26 10:41
superman 阅读(243)
评论(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] = 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