#CF1949G. 电动滑板车
电动滑板车
G. 电动滑板车
单个测试点时间限制: 秒 单个测试点内存限制: 兆字节
捷克理工大学校园由 栋建筑组成,编号从 到 。 在每栋建筑中,可能安排有数学课、计算机课,或者两者都没有(但不会同时有)。 此外,每栋建筑内最多有一名教授,每位教授要么擅长数学,要么擅长计算机。
作为大学快运公司的实习生,你的任务是快速把教授送到他们对应的课堂。 为此,你配备了一辆全新的双人电动滑板车:可以载你本人,外加最多一名乘客。
初始时,滑板车上只有你。 当你到达一栋建筑时,你可以让教授在这栋建筑上车(接走)或下车(放下)。 为了提高效率,你被允许前往每栋建筑最多一次,顺序可以自己决定(也可以自由选择起点)。
在行程结束后,必须满足:
- 所有安排了数学课(M)的建筑,必须有一名数学教授;
- 所有安排了计算机课(C)的建筑,必须有一名计算机教授。
请构造一个合法的行程。
输入格式
第一行一个整数 —— 建筑数量。
第二行一个长度为 的字符串 ,由 -、C、M 组成:
第 个字符表示第 栋楼的课程安排。
C = 计算机课,M = 数学课,- = 无课。
第三行一个长度为 的字符串 ,由 -、C、M 组成:
第 个字符表示第 栋楼的教授类型(若有)。
C = 计算机教授,M = 数学教授,- = 无教授。
保证至少存在一个合法方案。
输出格式
第一行输出一个整数 —— 行程中的操作总数。
接下来 行,每行是以下三种指令之一:
DRIVE x:前往编号为 的建筑();PICKUP:接走当前建筑原本就有的那位教授;DROPOFF:把车上的教授放下到当前建筑。
合法行程必须满足:
- 不能重复
DRIVE同一栋建筑; - 每栋楼最多按顺序执行一次
DROPOFF和一次PICKUP; - 执行
PICKUP时,该建筑原本必须有教授,且车上没有乘客; - 执行
DROPOFF时,车上必须有教授; - 行程结束后,所有有课的建筑都必须有对应类型的教授。
特别注意:你不能接走自己刚刚放下的教授。
样例输入 1
3
CM-
-CM
样例输出 1
7
DRIVE 3
PICKUP
DRIVE 2
DROPOFF
PICKUP
DRIVE 1
DROPOFF
样例输入 2
1
C
C
样例输出 2
0
样例输入 3
2
-M
MC
样例输出 3
4
DRIVE 1
PICKUP
DRIVE 2
DROPOFF
样例说明
第一个样例: 你先开车到 3 号楼,接走数学教授; 开到 2 号楼放下他(这里有数学课); 再从 2 号楼接走计算机教授; 开到 1 号楼放下她(这里有计算机课),完成任务。