题目大意:
一个仓库有N个机器人在移动,仓库的大小为A,B。会有M次操作,(E,W,S,N)分别代表东西南北,机器人在仓库里会有三种情况:1.正在移动的机器人i撞墙。2.正在移动的机器人i遇见机器人j。3.所有机器人没发生任何意外(OK)。根据操作,输出可能的结果。
数据分析
4 //代表几组测试案例
5 4 //代表仓库的大小
2 2 //代表有两个机器人进行两次操作
1 1 E
//代表第一个机器人的位置和方向
5 4 W
//代表第二个机器人的位置和方向
1 F 7
//代表编号为1的机器人向前走7次
2 L 7 //代表编号为2的机器人向左转7次。
(R向右转)
解题思路:
模拟即可,模拟机器人操作的每一步,在模拟的过程中判断机器人是否撞墙或者相遇,如果出现此状况就记录下来然后BREAK。最后输出结果。
注意(模拟可能代码会很长,一定要细心,多做几组测试数据调试检验代码的正确性)。
代码:
1 #include <algorithm>
2 #include <iostream>
3 #include <sstream>
4 #include <cstdlib>
5 #include <cstring>
6 #include <cstdio>
7 #include <string>
8 #include <bitset>
9 #include <vector>
10 #include <queue>
11 #include <stack>
12 #include <cmath>
13 #include <list>
14 #include <map>
15 #include <set>
16 using namespace std;
17 /***************************************/
18 #define ll long long
19 #define int64 __int64
20 /***************************************/
21 const int INF = 0x7f7f7f7f;
22 const double eps = 1e-8;
23 const double PIE=acos(-1.0);
24 const int dx[]= {0,-1,0,1};
25 const int dy[]= {1,0,-1,0};
26 const int fx[]= {-1,-1,-1,0,0,1,1,1};
27 const int fy[]= {-1,0,1,-1,1,-1,0,1};
28 /***************************************/
29 void openfile()
30 {
31 freopen("data.in","rb",stdin);
32 freopen("data.out","wb",stdout);
33 }
34 /**********************华丽丽的分割线,以上为模板部分*****************/
35 char fang[4]= {‘E‘,‘N‘,‘W‘,‘S‘};
36 struct Node
37 {
38 int x,y;
39 int c;
40 } node[200];
41 int main()
42 {
43 int cas;
44 scanf("%d",&cas);
45 while(cas--)
46 {
47 int A,B;
48 int i,j;
49 scanf("%d%d",&A,&B);
50 int n,m;
51 char c1;
52 scanf("%d%d",&n,&m);
53 for(i=1; i<=n; i++)
54 {
55 scanf("%d%d",&node[i].y,&node[i].x);
56 getchar();
57 scanf("%c",&c1);
58 getchar();
59 if (c1==‘E‘)
60 node[i].c=0;
61 if (c1==‘N‘)
62 node[i].c=1;
63 if (c1==‘W‘)
64 node[i].c=2;
65 if (c1==‘S‘)
66 node[i].c=3;
67 }
68 int ce=0;
69 int robot1,robot2,robot3;
70 for(i=1; i<=m; i++)
71 {
72 int robot,sum;
73 char action;
74 scanf("%d",&robot);
75 getchar();
76 scanf("%c",&action);
77 getchar();
78 scanf("%d",&sum);
79 if (ce)
80 continue;
81 if (action==‘L‘)
82 {
83 for(j=0; j<sum; j++)
84 {
85 node[robot].c+=1;
86 if (node[robot].c==4)
87 node[robot].c=0;
88 }
89 }
90 if (action==‘R‘)
91 {
92 for(j=0; j<sum; j++)
93 {
94 node[robot].c-=1;
95 if (node[robot].c==-1)
96 node[robot].c=3;
97 }
98 }
99 if (action==‘F‘)
100 {
101 if (node[robot].c==0)
102 {
103 for(j=1; j<=sum; j++)
104 {
105 if (ce)
106 break;
107 node[robot].y+=1;
108 if (node[robot].y>A)
109 {
110 ce=1;
111 robot1=robot;
112 // printf("Robot %d crashes into the wall\n",robot);
113 }
114 for(int k=1; k<=n; k++)
115 {
116 if (k==robot)
117 continue;
118 if (node[k].x==node[robot].x&&node[k].y==node[robot].y)
119 {
120 ce=2;
121 robot2=robot;
122 robot3=k;
123 // printf("Robot %d crashes into robot %d\n",robot,k);
124 }
125 }
126
127 }
128 }
129 if (node[robot].c==1)
130 {
131 for(j=1; j<=sum; j++)
132 {
133 if (ce)
134 break;
135 node[robot].x+=1;
136 if (node[robot].x>B)
137 {
138 ce=1;
139 robot1=robot;
140 // printf("Robot %d crashes into the wall\n",robot);
141 }
142 for(int k=1; k<=n; k++)
143 {
144 if (k==robot)
145 continue;
146 if (node[k].x==node[robot].x&&node[k].y==node[robot].y)
147 {
148 ce=2;
149 robot2=robot;
150 robot3=k;
151 // printf("Robot %d crashes into robot %d\n",robot,k);
152 }
153 }
154
155 }
156 }
157 if (node[robot].c==2)
158 {
159 for(j=1; j<=sum; j++)
160 {
161 if (ce)
162 break;
163 node[robot].y-=1;
164 if (node[robot].y<1)
165 {
166 ce=1;
167 robot1=robot;
168 // printf("Robot %d crashes into the wall\n",robot);
169 }
170 for(int k=1; k<=n; k++)
171 {
172 if (k==robot)
173 continue;
174 if (node[k].x==node[robot].x&&node[k].y==node[robot].y)
175 {
176 ce=2;
177 robot2=robot;
178 robot3=k;
179 // printf("Robot %d crashes into robot %d\n",robot,k);
180 }
181 }
182
183 }
184 }
185 if (node[robot].c==3)
186 {
187 for(j=1; j<=sum; j++)
188 {
189 if (ce)
190 break;
191 node[robot].x-=1;
192 if (node[robot].x<1)
193 {
194 ce=1;
195 robot1=robot;
196 // printf("Robot %d crashes into the wall\n",robot);
197 }
198 for(int k=1; k<=n; k++)
199 {
200 if (k==robot)
201 continue;
202 if (node[k].x==node[robot].x&&node[k].y==node[robot].y)
203 {
204 ce=2;
205 robot2=robot;
206 robot3=k;
207 // printf("Robot %d crashes into robot %d\n",robot,k);
208 }
209 }
210
211 }
212 }
213 }
214 }
215 if (!ce)
216 printf("OK\n");
217 else if (ce==1)
218 printf("Robot %d crashes into the wall\n",robot1);
219 else if (ce==2)
220 printf("Robot %d crashes into robot %d\n",robot2,robot3);
221 }
222 return 0;
223 }
时间: 2024-10-11 11:26:57