P16855 [GKS 2021 #E] Palindromic Crossword

题目描述

填字游戏是一个由黑色单元格和字母 A-Z 组成的矩形网格,如下图所示。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/rtw41omk.png) ::: 填字游戏中的单词定义为最长的垂直或水平字符段。在下方的填字游戏中,`DO` 和 `ON` 是单词的例子。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/j7kjsp8a.png) ::: 一个**回文填字游戏**是指其中每个单词都是回文。记 $R_{i,j}$ 为第 $i$ 行第 $j$ 列的字符,$i$ 和 $j$ 均从 $1$ 开始编号。左上角为 $R_{1,1}$。在下面的回文填字游戏示例中,位于 $R_{3,2}$ 的 `B` 既属于从 $R_{3,1}$ 开始的水平单词,也属于结束于 $R_{4,2}$ 的垂直单词,且这两个单词都是回文。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/u8zj65ht.png) ::: 你被赠予了一个有 $N$ 行 $M$ 列的回文填字游戏。你完成了填字游戏,扔掉了线索,准备把它挂在墙上。然而,你不小心擦掉了一些字母!你想尽可能地恢复填字游戏,但你已经没有线索了。仅利用填字游戏是回文的这一知识,恢复给定填字游戏中尽可能多的缺失字符。 缺失的字母在下图中表示为空的白色单元格。左侧的填字游戏是你得到的,右侧的填字游戏是你在恢复了尽可能多的字母后的结果。剩余的单元格无法填充,因为我们没有足够的信息来恢复它们。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/y57l4a36.png) :::

输入格式

输入的第一行给出测试用例的数量 $T$。接下来有 $T$ 个测试用例。 每个测试用例的第一行包含两个整数 $N$ 和 $M$,分别表示填字游戏的行数和列数。 接下来的 $N$ 行表示网格的 $N$ 行。第 $i$ 行由 $M$ 个字符组成,表示 $R_{i,1}, R_{i,2}, \dots, R_{i,M}$。每个字符是以下之一: - 大写字母(A-Z) - 句点(`.`)表示缺失的字母(在示例填字游戏中为空的白色单元格) - 井号(`#`)表示黑色单元格

输出格式

对于每个测试用例,输出一行,格式为 `Case #x: y`,其中 $x$ 是测试用例编号(从 $1$ 开始),$y$ 是被填充的空白色单元格的数量。然后,输出 $N$ 行,表示最终的网格,其中缺失的字符(`.`)在可能的情况下被替换为大写字母(A-Z)。

说明/提示

在样例 #2 中,我们可以填充 $8$ 个空白。填充缺失字母的方式如下: - 第 $1$ 行第 $4$ 列:由第 $1$ 行第 $1$ 列的字符可知为 `A`。 - 第 $2$ 行第 $4$ 列 = 第 $1$ 行第 $4$ 列的 `A`。 - 第 $2$ 行第 $6$ 列 = 第 $2$ 行第 $4$ 列的 `A`。 - 第 $3$ 行第 $6$ 列 = 第 $2$ 行第 $6$ 列的 `A`。 - 第 $3$ 行第 $2$ 列 = 第 $3$ 行第 $1$ 列的 `B`。 - 第 $4$ 行第 $2$ 列 = 第 $3$ 行第 $2$ 列的 `B`。 - 第 $4$ 行第 $3$ 列 = 第 $4$ 行第 $2$ 列的 `B`。 - 第 $4$ 行第 $4$ 列 = 第 $4$ 行第 $1$ 列的 `A`。 ### 限制条件 $1 \le T \le 100$。 至少存在一种填充方式,使得给定的输入网格成为回文填字游戏。 网格中的所有字符均属于集合 $\{\texttt{A-Z}, \#, .\}$。 **测试集 1** $1 \le N, M \le 50$。 **测试集 2** 最多 $10$ 个测试用例满足: $1 \le N, M \le 1000$。 其余测试用例满足: $1 \le N, M \le 50$。 翻译由 DeepSeek V4 Pro 完成