题号:NC230526
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld
题目描述
一个包含三原色 `RYB` 的序列
混合的结果定义为:
- 如果序列开头两项颜色相同,将这两项删去。
- 如果序列开头两项颜色不同,将这两项替换为与这两种颜色不同的颜色。
- 特别地,如果序列为空,则混合的结果是白色 `W`。
有一个长为

的颜色序列(某些位置为空),给出

个操作:
- `mix`:选择一个子序列和混合时的顺序(忽略空位置),给出其混合后的结果。
- `RY`:选择一个子序列,将所有 `R` 变为 `Y`,所有 `Y` 变为 `R`,`B` 和空位置不变。
- `RB`:选择一个子序列,将所有 `R` 变为 `B`,所有 `B` 变为 `R`,`Y` 和空位置不变。
- `YB`:选择一个子序列,将所有 `Y` 变为 `B`,所有 `B` 变为 `Y`,`R` 和空位置不变。
你需要根据 `mix` 操作的信息确定一种可能的原序列。
输入描述:
第一行包含两个整数
和
,分别是调色板中的单元格数和操作数。
接下来的
行描述了操作。第
行以第
个操作的名称和一个整数
,表示子序列下标的个数。接着
个整数
,表示子序列的下标。保证在一个操作中所有
都是不同的。如果是
操作,下标会按照颜色混合的顺序列出,并且该行还以代表结果颜色的字符结尾:“R”代表红色,“Y”代表黄色,“B”代表蓝色,“W”代表白色。
输出描述:
如果存在解决方案,则输出“YES”,否则输出“NO”。
如果答案为“YES”,则在下一行输出一个长度为
的字符串,由字符“R”、“Y”、“B”和“.”组成,代表初始的
个单元格中的油漆颜色调色板(分别为红色、黄色、蓝色和空)。如果有多个解决方案,请打印任何一个。
示例1
输入
复制
3 2
mix 2 2 1 R
mix 2 1 3 Y
说明
对于第一个测试用例,答案为“YB.”。与两种混合一致。第一次混合“BY”导致红色,而第二次混合“Y”导致黄色(空单元格被忽略)。
其他有效的解决方案包括“BYR”和“.RY”。
示例2
输入
复制
2 3
mix 1 2 Y
RB 1 2
mix 1 2 W
示例3
输入
复制
1 3
RY 1 1
YB 1 1
mix 1 1 B
说明
对于第三个测试用例,答案“R”与所有操作一致。在前两个操作中,它变为“Y”,然后变为“B”。在最后的操作中,混合“B”导致蓝色。
示例4
输入
复制
3 8
mix 2 1 2 R
mix 2 1 3 Y
RY 2 2 3
RB 3 1 2 3
YB 3 1 2 3
mix 1 1 W
mix 1 2 B
mix 1 3 Y
说明
对于第四个测试用例,答案“.RY”与所有操作一致。前两个混合是“R”和“Y”,分别产生红色和黄色。在接下来的三个操作中,调色板更改为“.YR”,然后是“.YB”,然后是“.BY”。最后三个混合与这个调色板一致。
备注:
原题链接:https://codeforces.com/problemset/problem/1344/F