按数目填色是个有名的智力游戏。我们现在考虑的是这个游戏的一维版本。在这个游戏中,玩家会有一行
系统将会给玩家一个提示,这个提示是一个含有
你将获得一个部分方格已填好颜色的游戏行格,即,你知道
更加详细来说,一个正确的游戏解应该满足提示,并且和已经知道颜色的方格的颜色一致。你的程序必须找出在所有正确的游戏解中都会填上黑色的方格和在所有正确的游戏解中都会填上白色的方格。
你可以假设每个输入一定存在至少一个正确的游戏解。
实现细节
你必须编写程序以实现以下的函数(或方法):
std::string solve_puzzle(std::string s, std::vector<int> c)
,s
: 一个含有 个字符的字符串。而对于每个 ( ),字符 将会是以下其中一个:- 'X', 表示方格
必须要填上黑色, - '_', 表示方格
必须要填上白色, - '.', 表示方格
没有任何信息。
- 'X', 表示方格
c
: 是一个长度为 的数组,它的内容是上面叙述中所讲的提示,- 这函数必须要返回一个长度为
的数组。对于每个 ( ) 而言,输出字符串的第 个字符应该是以下其中一个:- 'X', 表示在所有游戏解中,第
个方格都是填上黑色, - '_', 表示在所有游戏解中,第
个方格都是填上白色, - '?', 表示其他情况(即该游戏中存在两个正确的游戏解,且其中一个解该方格是填上黑色,但在另一个解中该方格是填上白色)。
- 'X', 表示在所有游戏解中,第
样例一
solve_puzzle("..........", [3, 4])
以下是这次游戏的所有正确的解:
- "XXX_XXXX__",
- "XXX__XXXX_",
- "XXX___XXXX",
- "_XXX_XXXX_",
- "_XXX__XXXX",
- "__XXX_XXXX".
你可以观察到下标为
样例二
solve_puzzle("........", [3, 4])
在这个样例中,正确的填色方法只有一种,即 "XXX_XXXX"。
样例三
solve_puzzle("..._._....", [3])
在这个样例中,我们可以推出方格
样例四
solve_puzzle(".X........", [3])
只有两个正确解符合上述描述:
- "XXX_______",
- "_XXX______".
因此正确的答案应该是 "?XX?______"。
子任务
在所有的子任务中
子任务 | 分数 | 对 `s` 的限制 | ||
---|---|---|---|---|
1 | 7 | `s` 只含有字符 '.' (即是空白的游戏行格) | ||
2 | 3 | 无 | `s` 只含有字符 '.' | |
3 | 22 | 无 | `s` 只含有字符 '.' | |
4 | 27 | 无 | `s` 只含有字符 '.' 及 '_' (只有关于填上了白色的方格信息) | |
5 | 21 | 无 | 无 | |
6 | 10 | 无 | ||
7 | 10 | 无 |
评测方式
评测程序将会按照下列格式读取输入数据:
- 第一行:字符串
s
, - 第二行:整数
,随后有 个整数 。
时间限制:
空间限制: