题目详情点此查看
花了近一个小时,总算是AC了,
其实这题比较简单,没啥算法,题目详情点击链接;
主要由以下事项:
1.我用的是二维数组,然后其(0, 0)点的位置与直角坐标系的远点位置恰好相反,因此处理数据时要特别注意。
2.最后提交时还出现了了WA, 然后一检查,我的天呐,我尽然把OK写成了小写的。。。。。。。
code:
//*************** //memory time // 288K 16MS #include <iostream> #include <fstream> using namespace std; class Pos{ public: int x, y, d; //robot的位置信息, d为方向,0, 1, 2, 3对应东北西南 }; int direction[4][2] = {0, 1, -1, 0, 0, -1, 1, 0}; //此数组记录方向,方便运算 Pos pos[102]; int main() { //ifstream in("data2632.in"); int k; cin >> k; while(k --) { int map[101][101] = {0}; int A, B, N, M; cin >> B >> A >> N >> M; for (int i = 1; i <= N; i ++) { int x, y; char d; cin >> y >> x >> d; map[A- x + 1][y] = i; pos[i].x = A - x + 1; pos[i].y = y; switch(d) { case 'E': pos[i].d = 0; break; case 'N': pos[i].d = 1; break; case 'W': pos[i].d = 2; break; case 'S': pos[i].d = 3; break; } } bool ok = true; while (M --) { int num, times; char action; cin >> num >> action >> times; if(action == 'F' && ok) { while(times --) { int x = pos[num].x; int y = pos[num].y; pos[num].x += direction[pos[num].d][0]; pos[num].y += direction[pos[num].d][1]; map[x][y] = 0; x = pos[num].x; y = pos[num].y; if(x < 1 || y < 1 || x > A || y > B) { cout << "Robot " << num << " crashes into the wall" << endl; //M = 0; ok = false; break; } else if(map[x][y] != 0) { cout << "Robot " << num << " crashes into robot " << map[x][y] << endl; //M = 0; ok = false; break; } else { map[x][y] = num; } } } else { times %= 4; pos[num].d += 4; if(action == 'L') { pos[num].d += times; } else { pos[num].d -= times; } pos[num].d %= 4; } } if(ok) { cout << "OK" << endl; } } return 0; }
附加测试数据:
Sample Input
8
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
9 5
5 19
2 4 E
4 3 N
6 2 E
9 5 S
9 1 W
4 F 1
4 R 1
4 F 6
4 L 5
4 F 3
4 L 1
5 R 1
5 F 3
5 L 1
5 F 2
5 L 1
5 F 3
5 R 5
5 F 2
5 R 1
5 F 2
4 F 2
4 L 1
4 F 3
9 5
2 6
9 5 S
9 1 W
1 F 1
1 R 1
1 F 2
2 F 2
2 R 1
2 F 3
5 4
2 2
1 1 E
5 4 W
1 R 1
1 F 2
5 4
2 2
1 1 E
5 4 W
1 L 1
1 F 2
Sample Output
Robot 1 crashes into the wall
Robot 1 crashes into robot 2
OK
Robot 1 crashes into robot 2
Robot 4 crashes into robot 5
Robot 2 crashes into robot 1
Robot 1 crashes into the wall
OK