POJ 2632 Crashing Robots
解题思路:普通模拟题,easy
Code:
1 #include<iostream>
2 using namespace std;
3
4 struct Dir
5 {
6 int y,x;
7 };
8
9 struct Pos
10 {
11 int x,y,r;
12 };
13 int ctoi(char c)
14 {
15 switch (c)
16 {
17 case 'E':
18 return 0;
19 case 'S':
20 return 1;
21 case 'W':
22 return 2;
23 }
24 return 3;
25 }
26 int main()
27 {
28 const Dir dir[4] = {{0, 1}, {-1, 0}, {0, -1}, {1, 0}};
29 Pos p[100];
30 int t, A, B, N, M, RI, rep, Ro1, Ro2;
31 char ch;
32 cin >> t;
33 while (t--)
34 {
35 int wh[100][100] = {0};
36 bool flag = true;
37 cin >> A >> B >> N >> M;
38 for (int i = 0; i < N; i++)
39 {
40 cin >> p[i].x >> p[i].y >> ch;
41 p[i].r = ctoi(ch);
42 wh[p[i].y - 1][p[i].x - 1] = i + 1;
43 }
44 for (int i = 0; i < M; i++)
45 {
46 cin >> RI >> ch >> rep;
47 RI = RI - 1;
48 if (flag)
49 {
50 if (ch == 'F')
51 {
52 wh[p[RI].y - 1][p[RI].x - 1] = 0;
53 for (int j = 0; (j < rep) && flag; j++ )
54 {
55 p[RI].x += dir[p[RI].r].x;
56 p[RI].y += dir[p[RI].r].y;
57 if (p[RI].x < 1 || p[RI].x > A || p[RI].y < 1 || p[RI].y > B)
58 {
59 flag = false;
60 Ro1 = RI + 1; Ro2 = 0;
61 }
62 else if (wh[p[RI].y - 1][p[RI].x -1] != 0)
63 {
64 flag = false;
65 Ro1 = RI + 1; Ro2 = wh[p[RI].y - 1][p[RI].x -1];
66 }
67 }
68 if (flag) wh[p[RI].y - 1][p[RI].x -1] = RI + 1;
69 }
70 else
71 {
72 int r = p[RI].r;
73 r = (ch == 'L') ? (r - rep) : (r + rep);
74 r %= 4;
75 r = (r < 0) ? (4 + r) : r;
76 p[RI].r = r;
77 }
78 }
79 }
80 if (flag)
81 printf("OK\n");
82 else
83 {
84 if(Ro2 != 0)
85 printf("Robot %d crashes into robot %d\n", Ro1, Ro2);
86 else
87 printf("Robot %d crashes into the wall\n", Ro1);
88 }
89 }
90 return 0;
91 }
浙公网安备 33010602011771号