Time limit: 3.000 seconds
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=54
旋转时+1或+3再取模即可。
完整代码:
/*0.019s*/ #include<cstdio> #include<cstring> const int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0}, dr[4] = {'N', 'E', 'S', 'W'}; int main() { bool lostpos[51][51] = {0}; int x, y, w, h, len, dir, i; bool ok; char s[101], c; scanf("%d%d", &w, &h); while (~scanf("%d%d %c\n", &x, &y, &c)) { ok = true; switch (c)// 初始化机器人方向 { case 'N': dir = 0; break; case 'E': dir = 1; break; case 'S': dir = 2; break; case 'W': dir = 3; break; } gets(s); len = strlen(s); for (i = 0; i < len && ok; ++i) { switch (s[i]) { case 'R'://右转 dir = (dir + 1) % 4; break; case 'L'://左转 dir = (dir + 3) % 4; break; case 'F'://向前走 if ((x + dx[dir] > w) || (y + dy[dir] > h) || (x + dx[dir] < 0) || (y + dy[dir] < 0)) { if (!lostpos[x][y])//出界 { printf("%d %d %c LOST\n", x, y, dr[dir]); ok = false, lostpos[x][y] = true; } } else x += dx[dir], y += dy[dir]; break; } } if (ok) printf("%d %d %c\n", x, y, dr[dir]); } return 0; }