#P2632. Crashing Robots

Crashing Robots

问题描述

在现代化的仓库中,机器人被用来取货。为确保机器人在抵达目的地时不会相互碰撞,需要进行周密的规划。当然,所有仓库都是矩形的,且每个机器人占据直径为1米的圆形地面空间。假设有N个机器人,编号从1到N。你将了解每个机器人的位置和朝向,以及所有指令——机器人会严格(且机械地)遵循这些指令。指令按顺序执行,没有两个机器人同时移动:一个机器人完成移动后,下一个才会开始移动。

如果机器人试图移动到仓库区域外,则会撞墙;如果两个机器人试图占据同一位置,则会相互碰撞。

输入格式

</p>

输入的第一行是K,即测试用例的数量。每个测试用例以一行开始,包含两个整数1 ≤ A, B ≤ 100,表示仓库的尺寸(单位:米)。A是东西方向的长度,B是南北方向的长度。

第二行包含两个整数1 ≤ N, M ≤ 100,分别表示机器人数量和指令数量。

接下来N行,每行包含两个整数1 ≤ Xi ≤ A, 1 ≤ Yi ≤ B和一个字母(N、S、E或W),按1到N的顺序给出每个机器人的起始位置和朝向。没有两个机器人从同一位置出发。

指令格式

最后有M行,按顺序给出指令,格式如下:
<机器人编号> <动作> <重复次数>

其中动作可以是:

  • L:左转90度
  • R:右转90度
  • F:前进1米

重复次数满足1 ≤ <重复次数> ≤ 100。

输出格式

每个测试用例输出一行:

  • 若机器人i撞墙,输出"Robot i crashes into the wall"(当Xi=0、Xi=A+1、Yi=0或Yi=B+1时视为撞墙)。
  • 若机器人i与机器人j碰撞(i为移动的机器人),输出"Robot i crashes into robot j"。
  • 若无碰撞,输出"OK"。

仅报告第一次发生的碰撞。

输入样例1

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  

输出样例1

Robot 1 crashes into the wall  
Robot 1 crashes into robot 2  
OK  
Robot 1 crashes into robot 2  

题目来源

Nordic 2005