贴的代码,这题我写了一下午了,无语了不想在做了
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 100 + 10;
int G[maxn][maxn];
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
struct Robots{
int x, y, d;
}r[100+10];
int main(){
int A, B, n, m, T, flag, rob, cra_rob;
char s[5];
scanf("%d", &T);
while(T--) {
flag = 0;
memset(G, 0, sizeof(G));
scanf("%d %d", &A, &B);
scanf("%d %d", &n, &m);
for(int i=1; i<=n; i++) {
scanf("%d %d", &r[i].x, &r[i].y);
scanf("%s", s);
G[r[i].y][r[i].x] = i;
switch(s[0]) {
case 'N': r[i].d = 0; break;
case 'E': r[i].d = 1; break;
case 'S': r[i].d = 2; break;
case 'W': r[i].d = 3; break;
}
}
int num, rep;
char act[3];
while(m--) {
scanf("%d %s %d", &num, act, &rep);
if(!flag) {
if(act[0] == 'L') r[num].d = ((r[num].d - rep)%4+4)%4;
else if(act[0] == 'R') r[num].d = (r[num].d + rep) % 4;
else {
G[r[num].y][r[num].x] = 0;
for(int i=0; i<rep; i++) {
r[num].x += dx[r[num].d];
r[num].y += dy[r[num].d];
if(r[num].x <= 0 || r[num].y <= 0 || r[num].x > A || r[num].y > B) {
rob = num;
flag = 1;
break;
} else if(G[r[num].y][r[num].x]) {
rob = num;
cra_rob = G[r[num].y][r[num].x];
flag = 2;
break;
}
}
if(!flag) G[r[num].y][r[num].x] = num;
}
}
}
if(flag == 1) printf("Robot %d crashes into the wall\n", rob);
else if(flag == 2) printf("Robot %d crashes into robot %d\n", rob, cra_rob);
else printf("OK\n");
}
return 0;
}