1930. 图形拼接
时间限制:1000 MS 内存限制:64 MB
题目描述
## 题目描述 小火龙找到了两块相同的拼图,可以用 $n \times m$ 的字符网格描述两块拼图,其中字符 '`X`' 表示拼图的一部分,而 '`.`' 表示网格的空白部分,不是拼图的部分。保证拼图块是一个连接的块。小火龙无法旋转或翻转拼图,他只能向任何方向平移它们。拼图之间也不能重叠。 现在需要你来确定是否可以根据给定输入的两个相同的拼图拼成一个矩形。矩形应该是实心的,即在矩形内部或其边界上不应有空洞。 ## 输入格式 输入的第一行将包含两个整数 $n$ 和 $m$($1 \leq n,m \leq 500$),是网格的尺寸。 接下来的 $n$ 行将描述这个网格。每行的长度为 $m$,由字符 '`.`' 和 '`X`' 组成, '`X`' 对应于拼图块的一部分。 '`.`' 是一个空的空间。 确保输入中至少有一个 '`X`' 字符,并 '`X`' 字符形成一个连接区域。 ## 输出格式 如果可以拼成一个矩形,则输出“`YES`”。 否则输出“`NO`”。 ## 输入 ```in1 2 3 XXX ``` ## 输出 ```out1 YES ``` ```in2 2 2 .X XX ``` ```out2 NO ``` ```in3 5 5 ..... ..X.. ..... ``` ```out3 YES ``` ## 提示 子任务一:$30$分,满足 $1 \leq n,m \leq 10$; 子任务二:$30$分,满足 $1 \leq n,m \leq 100$; 子任务三:$40$分,满足 $1 \leq n,m \leq 500$。 对于第一个样本,我们可以形成的矩形示例如下 : `XXXXXX` `XXXXXX` 或 `XXX` `XXX` `XXX` `XXX` 对于第二个样本,不可能在不旋转或翻转的情况下形成矩形。 对于第三个样本,我们可以形成的矩形示例如下 : `XX` 或 `X` `X`