P9874 [EC Final 2021] String-dle Count
题目描述
当大多数人都沉迷于玩 Wordle 的时候,庞教授却已经沉迷于玩 String-dle 了。
String-dle 是一个有趣的猜字符串的游戏,玩家在玩的时候要通过几轮尝试,猜出一个长度为 $k$ 的字符串。并且在每轮尝试中,玩家要提交一个长度为 $k$ 的字符串来作为他的猜测,而系统通过以下伪代码来为提交的猜测评级:
```
def grading(answer, guess):
let count be a hash map
for i = 1 to k:
if answer[i] not in count:
count[answer[i]] = 1
else:
count[answer[i]] = count[answer[i]] + 1
let grade be an array of length k
for i = 1 to k:
if answer[i] == guess[i]:
grade[i] = 'O'
count[guess[i]] = count[guess[i]] - 1
for i = 1 to k:
if answer[i] != guess[i]:
if count[guess[i]] > 0:
grade[i] = '-'
count[guess[i]] = count[guess[i]] - 1
else:
grade[i] = 'x'
return grade
```
返回的评级包括 $\tt{O}$(大写字母 O)、$\tt{-}$(破折号)和 $\tt{x}$(小写字母 x),且玩家可以基于先前的评级进行下一次猜测。下面是庞教授玩的一局游戏示例:
```
G: CRANE
A: xx--x
G: UTTER
A: xxOxx
G: NASAL
A: OOxOO
G: NATAL
A: OOOOO
```
在字符串 $\tt{G}$ 后面的是庞教授的猜测,以及在字符串 $\tt{A}$ 后面的是该次猜测的评级。
庞教授非常喜欢这个游戏。他确信他已经知道了这个游戏的完美策略。然而,今天他很生气,因为他认为评级系统出了问题!他想让人写一个分析程序,根据他的猜测与评级找出所有可能的可以作为答案的字符串。
由于评级系统可能出了问题,所以它可能不再符合上面给出的伪代码。具体来说,你需要找到所有符合输入的字符串。一个符合输入的字符串是指,对于输入中任意一个猜测 $g$ 和它的正确评级 $d$,都符合 `grading(s, g)=d`。
当然,你接受了这个任务。
输入格式
无
输出格式
无
说明/提示
对于第二个样例:
如果答案是 $\tt{ACDEF}$,则 $\tt{BBBAA}$ 的评级为 $\tt{xxx-x}$.