bzoj#P1387. [Baltic2002]Moving Robots

[Baltic2002]Moving Robots

题目描述

在二维网格平面上有许多机器人在移动。

每个机器人的状态由它所在的位置和面向的方位确定。

每个机器人按照各自固定的指令执行移动。

  • 位置由一对整数 (x,y)(x,y) 表示。

  • 机器人的方向有 44 个,用角度表示,分别是 0,90,180,2700,90,180,270

  • 命令有两种,转身和移动。

    • 转身命令有一个参数 dd,是 90,180,27090,180,270 之一,机器人当前的方向顺时针旋转 dd 度,即 cc 度将变为 (c+d)mod360(c+d)\mod 360

    • 移动指令没有参数,机器人将按它的方向前进一个单位。

    • 00 方向的移动,(x.y)(x+1,y)(x.y)→(x+1,y)

    • 9090 方向的移动,(x,y)(x,y+1)(x,y)→(x,y+1)

    • 180180 方向的移动,(x,y)(x1,y)(x,y)→(x-1,y)

    • 270270 方向的移动,(x,y)(x,y1)(x,y)→(x,y-1)

一个机器人依次完成它自己的指令序列。

序列执行完后机器人将停在最终的位置上。

两个机器人之间的行动不互相影响,同一个位置可以同时存在多个机器人。

在机器人开始移动前,可以去掉一些指令,所以控制中心可以改变机器人的行动路线和最终位置。

控制中心希望使所有的机器人最后到达同一个位置以进行检查。同时希望能够在去掉最少的指令情况下完成这个目标。

任务:共有 nn 个机器人。每个机器人有它的初始位置,初始方向和命令序列。

计算需要去掉的最少的命令数。

输入格式

第一行一个整数 nn ,表示机器人的个数。

接下来 nn 个部分描述每个机器人的信息。

每个部分的信息格式如下:

一行四个整数,x,y,c,lenx,y,c,len,分别表示这个机器人的初始位置,初始方向和它的指令序列长度。

接下来 lenlen 行,每行先读入一个字符 opop,表示操作类型。

op='S',表示移动操作。

op='T',表示转身命令。再读入一个整数 dd,表示转身命令的参数。

输出格式

需要去掉的最少的命令数。

2 0 270 5 
S 
T 180 
S 
S 
S 
1 -1 0 8 
S 
S 
T 90 
S T 270 
S 
T 90 
S 
2

样例说明

删除第一个机器人的第三个操作和第二个机器人的第五个操作,能让两个机器人在 (2,1)(2,1) 相遇。

数据规模与约定

对于 100%100\% 的数据,2n102\leq n\leq100x,y100\leq |x,y|\leq 10c{0,90,180,270}c\in\{0,90,180,270\}d{90,180,270}d\in\{90,180,270\}len50len\leq50