CF1150B Tiling Challenge

题目描述

有一天,Alice 在打扫她的地下室时,发现了一些非常奇特的东西:一组无限多的木制拼块!每个拼块由五个方格组成,其中四个方格分别与中间的第五个方格相邻: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1150B/ad6ce0df252a3db4eebc7f2ae8f0d041a8339ee0.png) 在这些拼块旁边放着一块很大的正方形木板。木板被划分为 $n^2$ 个格子,排列成 $n$ 行 $n$ 列。有些格子已经被单独的方块占据,剩下的格子是空的。Alice 开始思考,她是否可以用她找到的这些拼块完全填满木板。当然,每个拼块必须恰好覆盖木板上的五个不同的格子,任意两个拼块不能重叠,每个拼块必须完全放在木板内,不能有部分超出木板边界。然而,这块木板太大了,Alice 无法亲手完成拼接。你能帮她判断是否可以用这些拼块完全覆盖木板吗?

输入格式

输入的第一行包含一个整数 $n$($3 \leq n \leq 50$),表示木板的大小。 接下来的 $n$ 行描述木板。第 $i$ 行($1 \leq i \leq n$)包含一个长度为 $n$ 的字符串。其第 $j$ 个字符($1 \leq j \leq n$)为 "." 表示第 $i$ 行第 $j$ 列的格子是空的,为 "\#" 表示该格子已被占据。 你可以假设木板上至少有一个空格子。

输出格式

如果可以用 Alice 的拼块完全覆盖木板,输出 YES,否则输出 NO。你可以用任意大小写输出答案。

说明/提示

下图展示了示例木板及其拼接方式(如果存在拼接方案): ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1150B/4aa3066acea41ad93dd59954e4030c273a6b97d8.png) 由 ChatGPT 4.1 翻译