P13148 [GCJ 2018 #2] Gridception
题目描述
盗贼大师 Jom Codd 能够潜入他人的梦境。由于梦境观察技术还不够先进,Codd 看到的梦境是一个由单元格组成的梦境网格,每个单元格要么是白色,要么是黑色。
给定一个初始的梦境网格,Codd 可以通过“深入”操作,将每个白色单元格替换为一个 $2\times 2$ 的白色单元格网格,每个黑色单元格替换为一个 $2\times 2$ 的黑色单元格网格;这样会生成一个面积扩大四倍的新梦境网格。他可以在此基础上继续深入,如此反复。例如,给定如下初始梦境网格:
```
BBB
BWB
BBB
```
深入一次后,得到的新梦境网格为:
```
BBBBBB
BBBBBB
BBWWBB
BBWWBB
BBBBBB
BBBBBB
```
再深入一次,得到的新梦境网格为:
```
BBBBBBBBBBBB
BBBBBBBBBBBB
BBBBBBBBBBBB
BBBBBBBBBBBB
BBBBWWWWBBBB
BBBBWWWWBBBB
BBBBWWWWBBBB
BBBBWWWWBBBB
BBBBBBBBBBBB
BBBBBBBBBBBB
BBBBBBBBBBBB
BBBBBBBBBBBB
```
以此类推。
Codd 刚刚潜入了一个梦境,并看到了它的初始梦境网格。他正执行一项极其艰难的任务,他知道自己需要多次深入。为了帮助自己导航,他正在观察初始梦境网格中的各种“模式”。一个模式由一组通过边相连(仅共享角不算相连)的单元格及其颜色组成。一个模式可以包含内部空洞(只要模式的单元格是一个连通块);这些空洞不算作模式的一部分。如果两个模式的单元格数量和排列方式完全相同(不允许翻转或旋转),且颜色一致,则认为它们是相同的模式。
例如,在上述网格中,以下 $8$ 个单元格的模式出现在初始网格中:
```
BBB
B B
BBB
```
在深入一次后,这个模式不再出现,但在深入两次、三次及之后的每一次深入的梦境网格中,这个模式都会出现。
Codd 想要找到初始梦境网格中,能够在至少 $10^{100}$ 个更深层梦境网格中出现的最大模式。对于给定的例子,上述模式就是最大的满足条件的模式。尽管它在深入一次后没有出现,但在至少 $10^{100}$ 个更深层网格中都会出现。其他更小的模式也满足条件,但不存在 $9$ 个单元格的模式满足条件;唯一可能的 $9$ 个单元格模式只能是整个初始梦境网格,但这个模式在任何更深层网格中都不会出现,更不用说出现 $10^{100}$ 次了。
输入格式
第一行输入一个整数 $T$,表示测试用例的数量。接下来有 $T$ 组测试数据。每组数据第一行包含两个整数 $R$ 和 $C$,分别表示梦境网格的行数和列数。接下来的 $R$ 行,每行包含 $C$ 个字符,每个字符为 `B` 或 `W`,直接表示梦境网格。
输出格式
对于每个测试用例,输出一行,格式为 `Case #x: y`,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是满足 Codd 要求的最大模式的大小。
说明/提示
**样例解释**
样例 1 即为题目描述中的例子。
样例 2 中,一个可能的最大模式为:
```
BBB
WB
```
另一个同样大小的模式为:
```
BBB
W W
```
样例 3 中,整个初始梦境网格就是最大的模式。
样例 4 中,注意五个 W 不能构成一个合法模式,因为它们不是连通的。然而,以下模式是一个最大模式:
```
WB
BW
```
样例 5 中,整个初始梦境网格就是最大的模式。需要注意的是,尽管这个网格恰好是从 BW 深入得到的,但这与本题无关;Codd 永远不会“向上回溯”。
**数据范围**
- $1 \leq T \leq 100$。
**测试点 1(10 分,公开)**
- $1 \leq R \leq 3$。
- $1 \leq C \leq 4$。
**测试点 2(22 分,隐藏)**
- $1 \leq R \leq 20$。
- $1 \leq C \leq 20$。
由 ChatGPT 4.1 翻译