QOJ.ac

QOJ

حد الوقت: 30 s حد الذاكرة: 1024 MB مجموع النقاط: 40

#11462. 细菌战术

الإحصائيات

Becca 和 Terry 是两位微生物学家,他们之间有着友好的竞争关系。当他们需要从研究中休息一下时,他们喜欢一起玩一个游戏。游戏在一个包含 $R$ 行 $C$ 列的单元格矩阵上进行。最初,每个单元格要么是空的,要么包含放射性物质。

在每个玩家的回合中,如果矩阵中没有空单元格,该玩家输掉游戏。否则,他们选择一个空单元格并在其中放置一个细菌菌落。细菌菌落有两种类型:H(代表“水平”)和 V(代表“垂直”)。

  • 当 H 型菌落被放置在一个空单元格中时,它会占据该单元格(使其变为非空),并尝试向紧邻的西侧单元格(如果存在)和紧邻的东侧单元格(如果存在)扩散。
  • 当 V 型菌落被放置在一个空单元格中时,它会占据该单元格(使其变为非空),并尝试向紧邻的南侧单元格(如果存在)和紧邻的北侧单元格(如果存在)扩散。

每当一个菌落(无论哪种类型)尝试扩散到一个单元格时:

  • 如果该单元格包含放射性物质,菌落会发生突变,放置该菌落的玩家输掉游戏。
  • 如果该单元格是空的,菌落会占据该单元格(使其变为非空),然后再次触发上述规则(即菌落会尝试进一步扩散)。
  • 如果该单元格已经包含细菌(任何类型),菌落不会扩散到该单元格。

注意,玩家所有可用的移动都可能导致他们输掉游戏,从而陷入绝境。请参阅下方的样例解释以了解游戏的工作原理。

Becca 先手,然后两名玩家轮流移动,直到其中一人输掉游戏。如果双方都采取最优策略,谁会赢?如果 Becca 会赢,她有多少种不同的获胜开局移动?(当且仅当两次开局移动使用了不同的单元格,或者使用了不同种类的菌落,或者两者皆有时,它们才被视为不同。)

输入格式

输入的第一行给出测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含两个整数 $R$ 和 $C$,分别代表矩阵的行数和列数。然后是 $R$ 行,每行包含 $C$ 个字符。这些行中第 $i$ 行的第 $j$ 个字符代表矩阵中第 $i$ 行第 $j$ 列的状态。每个字符要么是 .(空单元格),要么是 #(包含放射性物质的单元格)。

输出格式

对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是一个整数:如果 Becca 不会赢,则为 $0$;如果 Becca 会赢,则为她可以采取的获胜开局移动的数量,如上所述。

数据范围

$1 \le T \le 100$。

测试集 1(可见) $1 \le R \le 4$ $1 \le C \le 4$

测试集 2(隐藏) $1 \le R \le 15$ $1 \le C \le 15$

样例

样例输入 1

5
2 2
..
.#
4 4
.#..
..#.
#...
...#
3 4
#.##
....
#.##
1 1
.
1 2
##

样例输出 1

Case #1: 0
Case #2: 0
Case #3: 7
Case #4: 2
Case #5: 0

说明

在样例 1 中,Becca 不能在西南角的空单元格放置 H 型菌落,也不能在东北角的空单元格放置 V 型菌落,因为这会扩散到放射性单元格,导致 Becca 输掉游戏。她只有两种不会立即导致失败的策略:

  1. 在西北角或东北角的空单元格放置 H 型菌落。该菌落也会扩散到这两个单元格中的另一个。
  2. 在西北角或西南角的空单元格放置 V 型菌落。该菌落也会扩散到这两个单元格中的另一个。

如果 Becca 选择策略 1,Terry 可以在西南角的空单元格放置一个 V 型菌落。如果 Becca 选择策略 2,Terry 可以在东北角的空单元格放置一个 H 型菌落。无论哪种情况,Becca 在下一回合都没有空单元格可选,因此她输了,Terry 赢了。

在样例 2 中,Becca 的任何开局移动都会导致突变。

在样例 3 中,Becca 的 5 种可能的开局移动会导致突变,但另外 7 种是获胜的。她可以在第二行的任何单元格放置 H 型菌落,或者在第二列的任何单元格放置 V 型菌落。无论哪种情况,她都会留下两个不相连的集合,每个集合包含 1 或 2 个单元格。在每个集合中,只能放置一种类型的菌落,并且放置它会消耗该集合中的所有空单元格。因此,无论 Terry 选择消耗哪一个集合,Becca 都可以消耗另一个,使 Terry 无路可走。

在样例 4 中,Becca 的两种不同的可能开局移动都是获胜的。

在样例 5 中,Becca 没有可能的开局移动。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.