#P16855. [GKS 2021 #E] Palindromic Crossword

[GKS 2021 #E] Palindromic Crossword

题目描述

填字游戏是一个由黑色单元格和字母 A-Z 组成的矩形网格,如下图所示。

:::align{center} :::

填字游戏中的单词定义为最长的垂直或水平字符段。在下方的填字游戏中,DOON 是单词的例子。

:::align{center} :::

一个回文填字游戏是指其中每个单词都是回文。记 Ri,jR_{i,j} 为第 ii 行第 jj 列的字符,iijj 均从 11 开始编号。左上角为 R1,1R_{1,1}。在下面的回文填字游戏示例中,位于 R3,2R_{3,2}B 既属于从 R3,1R_{3,1} 开始的水平单词,也属于结束于 R4,2R_{4,2} 的垂直单词,且这两个单词都是回文。

:::align{center} :::

你被赠予了一个有 NNMM 列的回文填字游戏。你完成了填字游戏,扔掉了线索,准备把它挂在墙上。然而,你不小心擦掉了一些字母!你想尽可能地恢复填字游戏,但你已经没有线索了。仅利用填字游戏是回文的这一知识,恢复给定填字游戏中尽可能多的缺失字符。

缺失的字母在下图中表示为空的白色单元格。左侧的填字游戏是你得到的,右侧的填字游戏是你在恢复了尽可能多的字母后的结果。剩余的单元格无法填充,因为我们没有足够的信息来恢复它们。

:::align{center} :::

输入格式

输入的第一行给出测试用例的数量 TT。接下来有 TT 个测试用例。

每个测试用例的第一行包含两个整数 NNMM,分别表示填字游戏的行数和列数。

接下来的 NN 行表示网格的 NN 行。第 ii 行由 MM 个字符组成,表示 Ri,1,Ri,2,,Ri,MR_{i,1}, R_{i,2}, \dots, R_{i,M}。每个字符是以下之一:

  • 大写字母(A-Z)
  • 句点(.)表示缺失的字母(在示例填字游戏中为空的白色单元格)
  • 井号(#)表示黑色单元格

输出格式

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

2
2 2
A.
.#
4 6
A...#.
B##...
B.###.
A...#.
Case #1: 2
AA
A#
Case #2: 8
A..A#.
B##A.A
BB###A
ABBA#.

提示

在样例 #2 中,我们可以填充 88 个空白。填充缺失字母的方式如下:

  • 11 行第 44 列:由第 11 行第 11 列的字符可知为 A
  • 22 行第 44 列 = 第 11 行第 44 列的 A
  • 22 行第 66 列 = 第 22 行第 44 列的 A
  • 33 行第 66 列 = 第 22 行第 66 列的 A
  • 33 行第 22 列 = 第 33 行第 11 列的 B
  • 44 行第 22 列 = 第 33 行第 22 列的 B
  • 44 行第 33 列 = 第 44 行第 22 列的 B
  • 44 行第 44 列 = 第 44 行第 11 列的 A

限制条件

1T1001 \le T \le 100

至少存在一种填充方式,使得给定的输入网格成为回文填字游戏。

网格中的所有字符均属于集合 {A-Z,#,.}\{\texttt{A-Z}, \#, .\}

测试集 1

1N,M501 \le N, M \le 50

测试集 2

最多 1010 个测试用例满足:

1N,M10001 \le N, M \le 1000

其余测试用例满足:

1N,M501 \le N, M \le 50

翻译由 DeepSeek V4 Pro 完成