CF733C Epidemic in Monstropolis
题目描述
Monstropolis 发生了一场疫情,所有的怪兽都生病了。为了恢复健康,所有的怪兽排队等候这座城市唯一的一位医生的接诊。
很快,怪兽们感到饥饿,开始互相吞食。
如果一个怪兽的体重严格大于和它相邻的怪兽,且他们在队伍中相邻,这只怪兽就可以吃掉另一只怪兽,吞食是瞬间完成的。每一时刻不会有多只怪兽同时被吞食。每当怪兽 $A$ 吃掉怪兽 $B$ 之后,怪兽 $A$ 的体重会增加被吞掉怪兽 $B$ 的体重。吞食后的队伍长度减少 $1$,被吞食怪兽之后的所有怪兽都会向前移动一步,确保队伍中没有空位。每个怪兽可以连续吞食多只怪兽。最初队伍中有 $n$ 只怪兽,第 $i$ 只怪兽的体重为 $a_i$。
举例来说,若最初队伍中的体重为 $[1,2,2,2,1,2]$(从左到右编号 $1$ 到 $6$),则以下是可能的几种情形:
1. 第一只怪兽不能吃掉第二只怪兽,因为 $a_1=1$ 不大于 $a_2=2$。
2. 第二只怪兽不能吃掉第三只怪兽,因为 $a_2=2$ 不大于 $a_3=2$。
3. 第二只怪兽不能吃掉第五只怪兽,因为它们不是相邻的。
4. 第二只怪兽可以吃掉第一只怪兽,队伍会变成 $[3,2,2,1,2]$。
一段时间后,有人讲了个好笑的笑话,所有怪兽都康复了。这时队伍中还剩 $k$ 只怪兽($k \leq n$),第 $j$ 只怪兽的体重是 $b_j$。$a$ 和 $b$ 两个序列都按照怪兽在队伍中的顺序给出。
你需要给出一种可能发生的吞食过程,使怪兽队列从初始变为现在的状态,或者判断这种情况根本不可能发生。假定在怪兽互相吞食的时候,医生没有看任何一个怪兽。
输入格式
第一行包含一个整数 $n$,表示初始队伍中怪兽的数量,$1 \leq n \leq 500$。
第二行包含 $n$ 个整数 $a_1, a_2, ..., a_n$,表示每只怪兽的初始体重,$1 \leq a_i \leq 10^6$。
第三行包含一个整数 $k$,表示笑话之后队伍中剩下的怪兽数量,$1 \leq k \leq n$。
第四行包含 $k$ 个整数 $b_1, b_2, ..., b_k$,表示每只怪兽此时的体重,$1 \leq b_j \leq 5 \cdot 10^8$。
怪兽编号始终按队头到队尾的顺序排序。
输出格式
如果不存在达到最终状态的吞食方案,则输出一行 “NO”。
否则,第一行输出 “YES”。接下来输出 $n-k$ 行,每行为一步吞食操作,按照吞食发生的顺序。每行输出 $x$,表示当前队伍中的第 $x$ 只怪兽进行吞食,后接空格和一个字母:'L' 表示该怪兽吞吃其左侧(前面)相邻的怪兽,'R' 表示吞吃其右侧(后面)相邻的怪兽。每次吞吃队伍重新编号。
如果存在多种合法方案,输出其中任意一种即可。
说明/提示
例如,在第一个示例中,最初 $n=6$ 只怪兽,体重为 $[1,2,2,2,1,2]$。最终目标队列是 $[5,5]$。以下是实现目标的一个吞食序列:
- 第二只怪兽吃掉左侧(即第一只怪兽),队伍变成 $[3,2,2,1,2]$;
- 第一只怪兽(注意,之前是第二只)吃掉右侧(即第二只怪兽),队伍变成 $[5,2,1,2]$;
- 第四只怪兽吃掉左侧(即第三只怪兽),队伍变成 $[5,2,3]$;
- 最后第三只怪兽吃掉左侧(即第二只怪兽),队伍变成 $[5,5]$。
注意每一步输出怪兽在当前队伍中的编号。
由 ChatGPT 5 翻译