CF1949G Scooter
题目描述
捷克技术大学的校园内有 $n$ 栋建筑,编号从 $1$ 到 $n$。每栋建筑可能安排一堂数学课或一堂计算机课,或者没有安排任何课程(不能同时安排两门课)。此外,每栋建筑最多有一位教授,这位教授要么擅长数学,要么擅长计算机科学。
作为 University Express Inc. 的实习生,你的任务是快速将教授送到他们的课堂。公司为你提供了一辆全新的双人滑板车,能载你和最多一位乘客。
开始时,滑板车上只有你。当你到达某栋建筑时,可以接上或送下教授。为了提高效率,你可以选择任意顺序访问这 $n$ 栋建筑中的每一栋建筑,但每栋建筑只能访问一次(你可以选择从哪栋建筑开始)。
在行程结束后,每栋安排了数学课的建筑必须有一位数学教授,每栋安排了计算机课的建筑必须有一位计算机教授。
请设计一条路线,使所有课程得以进行。
输入格式
第一行输入一个整数 $n$ ($1 \le n \le 2000$),表示建筑的数量。
第二行输入一个长度为 $n$ 的字符串 $c$,由字符 $\texttt{-}$、$\texttt{C}$ 和 $\texttt{M}$ 组成。第 $i$ 个字符表示第 $i$ 栋建筑安排的课程类型,其中 $\texttt{C}$ 表示计算机科学课,$\texttt{M}$ 表示数学课,$\texttt{-}$ 表示没有安排课程。
第三行输入一个长度为 $n$ 的字符串 $p$,由字符 $\texttt{-}$、$\texttt{C}$ 和 $\texttt{M}$ 组成。第 $i$ 个字符表示第 $i$ 栋建筑内教授的专业,其中 $\texttt{C}$ 表示计算机科学专家,$\texttt{M}$ 表示数学专家,$\texttt{-}$ 表示没有教授。
保证对于输入的所有测试数据,至少有一种有效的行程。
输出格式
第一行输出一个整数 $l$,表示你设计的行程方案包含的操作数量。
接下来的 $l$ 行中,每行描述一个操作,可以是以下三种指令之一:
1. $\texttt{DRIVE } x$ —— 驶向编号为 $x$ 的建筑($1 \leq x \leq n$);
2. $\texttt{PICKUP}$ —— 在当前建筑接上教授;
3. $\texttt{DROPOFF}$ —— 在当前建筑放下教授。
要确保行程方案有效,必须满足以下条件:
1. 每个 $\texttt{DRIVE}$ 指令只能驶往不同的建筑;
2. 在每栋建筑上,最多只能执行一条 $\texttt{PICKUP}$ 和一条 $\texttt{DROPOFF}$ 指令,且顺序为先接后送;
3. 执行 $\texttt{PICKUP}$ 指令时,当前建筑必须有一位教授,且滑板车上必须为空;
4. 执行 $\texttt{DROPOFF}$ 指令时,滑板车上必须已经有一位教授;
5. 行程结束时,所有安排了课程的建筑都必须有适合的专业教授驻扎(无论是原本就在那里的,还是由你接送过去的)。
特别注意,不能在刚送下教授后,又立即将相同的教授接上。
## 提示
在第一个样例中,你首先驾驶滑板车去第 $3$ 号建筑,接上数学教授,然后送到第 $2$ 号建筑,因为那里有一节数学课。接着,你在第 $2$ 号建筑接上计算机科学教授,并将她送到第 $1$ 号建筑,完成整个行程。
**本翻译由 AI 自动生成**
说明/提示
In the first sample, You start by driving to building number $ 3 $ . You then pick up the mathematics professor. After dropping him off at building number $ 2 $ , where a mathematics class is being held, you pick up the computer science professor from there, and drop her off at building number $ 1 $ , finishing your itinerary.