#aBC322D. [ABC322D] Polyomino
[ABC322D] Polyomino
AT_abc322_d [ABC322D] Polyomino
题目描述
将若干个正方形通过边相连形成的连通多边形形状的拼图块称为 多连方块(ポリオミノ)。
现在有一个 行 列的网格,以及 个可以放入该网格的多连方块。
第 个多连方块的形状由 个字符 ()表示。 表示将第 个多连方块放在一个空网格上的状态,若 为 #,则表示该多连方块覆盖了从上到下第 行、从左到右第 列的格子;若为 .,则表示未覆盖。请参考输入输出样例 的图示。
你需要将这 个多连方块全部铺在网格上,并满足以下所有条件:
- 网格的所有格子都被多连方块覆盖。
- 多连方块之间不能重叠。
- 多连方块不能超出网格边界。
- 多连方块可以任意平移和旋转,但不能翻转。
请判断是否存在一种方式,使得可以将这 个多连方块铺满整个网格,并满足上述条件。
输入格式
输入通过标准输入给出,格式如下:
输出格式
如果存在一种方式可以满足题目要求,将多连方块铺满网格,则输出 Yes;否则输出 No。
输入输出样例 #1
输入 #1
....
###.
.#..
....
....
.###
.##.
....
..#.
.##.
.##.
.##.
输出 #1
Yes
输入输出样例 #2
输入 #2
###.
#.#.
##..
....
....
..#.
....
....
####
##..
#...
#...
输出 #2
Yes
输入输出样例 #3
输入 #3
##..
#..#
####
....
....
##..
.##.
....
.#..
.#..
.#..
.#..
输出 #3
No
输入输出样例 #4
输入 #4
....
..#.
....
....
....
..#.
....
....
....
..#.
....
....
输出 #4
No
输入输出样例 #5
输入 #5
....
####
#...
#...
....
####
...#
..##
....
..##
..#.
..##
输出 #5
No
输入输出样例 #6
输入 #6
###.
.##.
..#.
.###
....
...#
..##
...#
....
#...
#...
#...
输出 #6
Yes
说明/提示
限制条件
- 只会是
#或.。 - 给定的多连方块都是连通的。即,多连方块由正方形组成,这些正方形之间可以通过上下左右方向互相到达。
- 给定的多连方块不会是空的。
样例解释 1
与输入样例 对应的多连方块形状如下图所示。

在这种情况下,可以如下图所示地放置多连方块,使其满足题目要求。

因此答案为 Yes。
样例解释 2
在输入样例 中,第 个多连方块的形状可能是带有空洞的多边形。
样例解释 3
请注意,铺放多连方块时,不能将其翻转。
由 ChatGPT 4.1 翻译