luogu#P8455. 「SWTR-8」扫雷计数
「SWTR-8」扫雷计数
题目背景
2020 年 6 月的某一天,小 A 在等待网络加载的过程中打开了扫雷,从此便一发不可收拾。
小 A 是一个任何事都喜欢做到极致的人,玩游戏也不例外:他不惜花费大量时间不断尝试打破记录。一个个夜晚就在熟练的 Alt + G + N
中过去了。
“这把有戏,前五十个雷只用了不到四十五秒”。他心里想着,紧握鼠标的手微微颤抖。
“快,快,快 …… 还有最后二十个雷 ……”。
游戏的关键时刻,他难以按捺激动的心情。直到他遇到了二选一。
他愣了一下,随后迅速按下最后两块空地当中的一个。
一束横贯屏幕的白色激光缓缓扫过,他知道自己打破了记录 …… 整整十二秒!巨大的惊喜让他跳了起来。
2020.6.19
题目描述
以下是简化后的扫雷游戏规则:
- 定义连通为 八连通。
- 如果打开雷,所有雷 全部同时爆炸,游戏结束。
- 如果打开空地,若其周围没有雷,则递归打开周围八个方块。
- 如图,点开任意红色框内方块均形成当前局面。
给定一张 的初始地图。小 A 决定搜出所有可能的局面,并找到最优鼠标点击顺序,从而速通这张地图。
为设置合适的数组大小,小 A 需要知道有多少种不同局面。对 取模。
- 如果方块是雷,它有爆炸和未爆炸两种状态;如果方块是空地,它有打开和未打开两种状态。
- 两个局面不同,当且仅当存在方块状态不同。
- 保证周围无雷的空地形成不超过 个连通块。
输入格式
第一行一个整数 ,表示该测试点的 Subtask 编号。
第二行两个整数 。
接下来 行,每行一个长度为 的字符串描述地图,其中 表示方块无雷, 表示方块有雷。
输出格式
一行一个整数表示答案。
0
1 2
.*
4
0
2 3
..*
...
20
0
4 4
..*.
.*..
*...
....
2112
0
7 6
..*...
......
*...**
......
..*...
......
......
5041530
提示
「样例解释」
用 .
表示未打开的方块,+
表示打开的方块,*
表示未爆炸的雷,!
表示爆炸的雷。
样例 1 的所有 4 种局面为 .* +* .! +!
。
样例 2 的所有 20 种局面为
0
..*
...
1
++* .+* ..! ..* ..*
++. ... ... .+. ..+
2
++! ++* .+! .+* .+* ..! ..! ..*
++. +++ ... .+. ..+ .+. ..+ .++
3
++! .+! .+! .+* ..!
+++ .+. ..+ .++ .++
4
.+!
.++
数字描述了最少点击次数。
「数据范围与约定」
本题采用捆绑测试。
设周围无雷的空地形成 个连通块。
- Subtask #1(15 points):。
- Subtask #2(4 points):地图中只有一个雷。
- Subtask #3(5 points):。
- Subtask #4(6 points):。
- Subtask #5(7 points):。
- Subtask #6(8 points):。依赖 Subtask #1,#2,#3,#4,#5。
- Subtask #7(9 points):。依赖 Subtask #6。
- Subtask #8(16 points):。依赖 Subtask #7。
- Subtask #9(17 points):。依赖 Subtask #8。
- Subtask #10(13 points):无特殊限制。依赖 Subtask #9。
对于 的数据:
- 。
- 。
- 不保证 地图中有雷或空地。
「题目来源」
- Sweet Round 8 D
- Idea & Solution:Alex_Wei。
- Tester:chenxia25 & asmend。
感谢 Elegia 对本题做出的贡献。