CF745B Hongcow Solves A Puzzle

题目描述

Hongcow 喜欢解谜题。 有一天,Hongcow 找到了两块完全相同的拼图碎片,并看到旁边写着“拼一个矩形”。每个拼图碎片可以用一个 $n$ 行 $m$ 列的字符网格描述,字符 `'X'` 表示拼图的一部分,字符 `'.'` 表示网格的空白部分。保证每个拼图碎片是一个四连通(4-connected)块。具体拼图碎片的描述方式见输入格式和样例。 拼图碎片很重,Hongcow 不能旋转或翻转它们,但他可以在各个方向上移动这两块碎片。两个拼图碎片之间不能有重叠。 现在给定其中一个拼图碎片的描述,请你判断是否可能用这两块完全相同的拼图碎片拼成一个矩形。拼出的矩形必须是实心矩形,即内部和边界上都不能有空洞。同时注意,Hongcow 不能翻转、不能旋转拼图碎片,而且拼图碎片不能重叠,即来自不同碎片的 `'X'` 不能出现在同一个位置上。

输入格式

第一行输入两个整数 $n$ 和 $m$,表示拼图碎片的行数和列数($1 \leq n, m \leq 500$)。 接下来 $n$ 行,每行 $m$ 个字符,描述一个拼图碎片。每行只包含 `'.'` 和 `'X'` 两种字符。`'X'` 表示拼图的一部分,`'.'` 表示空白。 保证至少有一个 `'X'`,并且所有 `'X'` 形成一个四连通块。

输出格式

如果 Hongcow 能拼出一个实心矩形,输出 `YES`,否则输出 `NO`。

说明/提示

对于第一个样例,我们可以拼成如下的矩形: 111222 111222 对于第二个样例,无法在不旋转或翻转的情况下拼出矩形。 对于第三个样例,可以将第一块拼图向右移动一格,然后可以拼成如下的矩形: ..... ..XX. ..... ..... ..... 由 ChatGPT 5 翻译