CF803E Roma and Poker
题目描述
每天晚上,Roma 都会在他最喜欢的网站上玩在线扑克。这个网站的扑克规则有些奇怪:每一局总是两名玩家,没有下注,胜者从败者那里获得 $1$ 个虚拟布尔(bourle)。
昨晚,Roma 开始玩扑克。他决定至多输掉 $k$ 个虚拟布尔——如果他的输局数比赢局数多 $k$,他会立即停止游戏。同时,如果他今晚赢的钱足够了,也就是他赢的局数比输的局数多 $k$,他也会离开游戏。
第二天早上,Roma 发现了一张纸条,上面写着他的比赛结果序列。Roma 记不清具体的结果,其中有些字符写得模糊不清,因此无法辨认出是赢了 $k$ 个布尔还是输了。
Roma 记录的这个序列是字符串 $s$,其字符包括 W(Roma 胜利),L(Roma 失败),D(平局),以及 ?(结果未知)。现在 Roma 想将所有的 ? 替换为 W、L 或 D,恢复出某个可能的有效序列。若完成替换后的序列满足以下所有条件,则称其为有效的:
- 最终,胜局数与败局数的绝对差值等于 $k$;
- 在任意一局比赛之前,胜局数与败局数的绝对差值均不等于 $k$。
请帮助 Roma 把所有的 ? 替换为 W、L 或 D,恢复出任意一个有效的结果序列。
输入格式
第一行包含两个整数 $n$(Roma 结果序列的长度)和 $k$($1 \le n, k \le 1000$)。
第二行包含长度为 $n$ 的字符串 $s$,其中每个字符均为大写字母 W、L、D 或 ?。
输出格式
如果不存在可以通过替换字符串 $s$ 中所有 ? 变为 W、L 或 D 后得到的有效序列,请输出 NO。
否则输出这样一个有效序列。如果有多种答案,输出任意一种即可。
说明/提示
由 ChatGPT 5 翻译