4 5 4 2 2 1 1 E 5 4 W 1 F 7 2 F 7 5 4 2 4 1 1 E 5 4 W 1 F 3 2 F 1 1 L 1 1 F 3 5 4 2 2 1 1 E 5 4 W 1 L 96 1 F 2 5 4 2 3 1 1 E 5 4 W 1 F 4 1 L 1 1 F 20
Robot 1 crashes into the wall Robot 1 crashes into robot 2 OK Robot 1 crashes into robot 2
Source
一道简单的模拟题,但是WA了好多次= =debug de的恶心= =目测是自己方法太挫才会有各种问题=QAQ
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { int k, a, b, n, m; int g[110][110]; int x[110], y[110], d[110]; char s[5]; scanf("%d", &k); while(k--) { memset(g, 0, sizeof(g)); scanf("%d %d %d %d", &a, &b, &n, &m); for(int i = 1; i <= n; i++) { scanf("%d %d %s", &x[i], &y[i], s); if(strcmp(s, "N") == 0) d[i] = 1; else if(strcmp(s, "E") == 0) d[i] = 2; else if(strcmp(s, "S") == 0) d[i] = 3; else d[i] = 0; g[x[i]][y[i]] = i; } int flag = 0, crash1, crash2; int num, cnt; while(m--) { scanf("%d %s %d", &num, s, &cnt); if(!flag) { if(strcmp(s, "L") == 0) { d[num] = (d[num] + 4 - cnt % 4) % 4; } else if(strcmp(s, "R") == 0) { d[num] = (d[num] + cnt) % 4; } else { if(d[num] == 0) { for(int i = x[num] - 1; i >= (0 < x[num]-cnt ? x[num]-cnt : 1); i--) { if(g[i][y[num]]) { crash1 = num; crash2 = g[i][y[num]]; flag = 2; break; } } if(!flag) { if(x[num] - cnt <= 0) { crash1 = num; flag = 1; } else { g[x[num]][y[num]] = 0; g[x[num]-cnt][y[num]] = num; x[num] -= cnt; } } } else if(d[num] == 1) { for(int i = y[num] + 1; i <= (b > y[num]+cnt ? y[num]+cnt : b); i++) { if(g[x[num]][i]) { crash1 = num; crash2 = g[x[num]][i]; flag = 2; break; } } if(!flag) { if(y[num] + cnt > b) { crash1 = num; flag = 1; } else { g[x[num]][y[num]] = 0; g[x[num]][y[num]+cnt] = num; y[num] += cnt; } } } else if(d[num] == 2) { for(int i = x[num] + 1; i <= (a > x[num]+cnt ? x[num]+cnt : a); i++) { if(g[i][y[num]]) { crash1 = num; crash2 = g[i][y[num]]; flag = 2; break; } } if(!flag) { if(x[num] + cnt > a) { crash1 = num; flag = 1; } else { g[x[num]][y[num]] = 0; g[x[num]+cnt][y[num]] = num; x[num] += cnt; } } } else { for(int i = y[num] - 1; i >= (0 < y[num]-cnt ? y[num]-cnt : 1); i--) { if(g[x[num]][i]) { crash1 = num; crash2 = g[x[num]][i]; flag = 2; break; } } if(!flag) { if(y[num] - cnt <= 0) { crash1 = num; flag = 1; } else { g[x[num]][y[num]] = 0; g[x[num]][y[num]-cnt] = num; y[num] -= cnt; } } } } } } if(!flag) printf("OK\n"); else if(flag == 1) { printf("Robot %d crashes into the wall\n", crash1); } else { printf("Robot %d crashes into robot %d\n", crash1, crash2); } } return 0; }