CF2046F2.Yandex Cuneiform (Hard Version)
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是该问题的困难版本。不同之处在于本版本对问号的数量没有限制。只有在你解决了所有版本的问题后,才能进行 hack。
很长一段时间里,没有人能破译苏美尔楔形文字。然而,它终于屈服于压力!今天,你有机会破译 Yandex 楔形文字。
Yandex 楔形文字由以下规则定义:
- 空字符串是 Yandex 楔形文字。
- 如果你在一个 Yandex 楔形文字中,恰好插入一份 'Y'、'D'、'X' 三个字母各一份,并且插入后没有两个相邻的字母相同,那么你得到的字符串也是 Yandex 楔形文字。
- 如果一个字符串无法通过上述规则得到,那么它就不是 Yandex 楔形文字。
现在给你一个模板。模板是一个只包含 'Y'、'D'、'X' 和 '?' 的字符串。
你需要判断是否存在一种方法,将每个问号替换为 'Y'、'D' 或 'X',使得最终得到的字符串是一个 Yandex 楔形文字。如果存在,输出任意一种可行的方案,并输出一组插入操作序列,使得可以得到你输出的楔形文字。
在本题版本中,模板中的问号数量没有限制。
输入格式
每组测试包含多个测试用例。第一行包含测试用例数 t(1≤t≤5⋅104)。接下来是每个测试用例的描述。
每个测试用例包含一行,表示一个长度为 n 的模板(3≤n<2⋅105,nmod3=0),只包含 'Y'、'D'、'X' 和 '?' 字符。
保证所有测试用例中 n 的总和不超过 2⋅105。
输出格式
对于每个测试用例,如果无法从给定模板得到一个楔形文字,输出一行 'NO'。
否则,第一行输出 'YES',第二行输出任意一个可行的楔形文字。之后,输出一组插入操作序列,能够得到你输出的楔形文字。
操作序列由 3n 个三元组组成。每个三元组包含三个对,每个对的形式为 c p,其中 c 是 'Y'、'D' 或 'X' 中的一个字母,p 是插入该字母的位置。插入位置指的是从字符串开头跳过 p 个字符后插入。例如,在字符串 "YDX" 中插入字符 'D',p=3 时结果为 "YDXD",p=0 时结果为 "DYDX"。注意,索引不能超过当前字符串长度。
操作按从上到下、从左到右的顺序依次应用。每次插入一个三元组后,字符串中不应出现两个相邻且相同的字符。
输入输出样例
输入#1
4 ??? Y??D?X ??? D??DXYXYX
输出#1
YES YDX X 0 D 0 Y 0 YES YDXDYX X 0 Y 0 D 1 X 2 D 3 Y 4 YES YDX Y 0 D 1 X 2 NO
说明/提示
在第二个样例中,字符串的变化过程如下:""→YDX→YDXDYX。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?