poj 2632 模拟
来源:互联网 发布:linux 开启服务 编辑:程序博客网 时间:2024/05/22 16:07
#include <stdio.h>#include <string.h>struct pos{ int x, y;} p[101];int map[101][101], flag;char dir[101];int a, b;void crash(int rob, char op){ switch (op) { case 'L': switch (dir[rob]) { case 'N': dir[rob] = 'W'; break; case 'W': dir[rob] = 'S'; break; case 'S': dir[rob] = 'E'; break; case 'E': dir[rob] = 'N'; } break; case 'R': switch (dir[rob]) { case 'N': dir[rob] = 'E'; break; case 'E': dir[rob] = 'S'; break; case 'S': dir[rob] = 'W'; break; case 'W': dir[rob] = 'N'; } break; case 'F': map[p[rob].x][p[rob].y] = 0; switch (dir[rob]) { case 'N': p[rob].y++; break; case 'E': p[rob].x++; break; case 'S': p[rob].y--; break; case 'W': p[rob].x--; break; } if (p[rob].x == 0 || p[rob].x == a + 1 || p[rob].y == 0 || p[rob].y == b + 1) { printf("Robot %d crashes into the wall\n", rob); flag = 1; return; } else if (map[p[rob].x][p[rob].y] != 0) { flag = 1; printf("Robot %d crashes into robot %d\n", rob, map[p[rob].x][p[rob].y]); } map[p[rob].x][p[rob].y] = rob; }}int main(void){ int k, n, m, x, y; int i, j, rob, rep; char d, op; scanf("%d", &k); while (k--) { memset(map, 0, sizeof(map)); flag = 0; scanf("%d %d", &a, &b); scanf("%d %d", &n, &m); for (i = 1; i <= n; i++) { scanf("%d %d %c", &x, &y, &d); map[x][y] = i; dir[i] = d; p[i].x = x, p[i].y = y; } for (i = 0; i < m; i++) { scanf("%d %c %d", &rob, &op, &rep); if (flag) continue; while (rep-- && !flag) crash(rob, op); } if (!flag) printf("OK\n"); } return 0;}