题目大意
题目大意
有一张地图,可以通过若干次贯穿整张纸的水平方向和垂直方向的折叠,最终被折叠成一个 的正方形单位。每次折叠都发生在距离纸张边缘为整数个单位的位置。
当把这张地图重新完全展开时,所有的折痕会把纸张划分成一个 的正方形网格。任意两个相邻正方形之间共享的边即为一条长度为 的折痕。根据折叠方向的不同,折痕可以分为两种:
-
峰折(Mountain fold):向观察者方向折叠而成的凸起折痕。
-
谷折(Valley fold):背离观察者方向折叠而成的凹陷折痕。
题目给定一个 的字符矩阵,用来编码展开后的地图折痕状态。矩阵中第 行第 列的字符含义如下:
-
当 和 均为奇数时,字符为
.,表示一个 的正方形。 -
当 和 均为偶数时,字符为
+,表示四个正方形相交的角。 -
其他情况下,字符表示两个相邻正方形之间的折痕:
M表示峰折,V表示谷折。
任务:给定上述字符矩阵,判断是否能通过上述合法的折叠过程(每次水平或垂直折叠贯穿当前的整张纸,直到折成 大小),在现实中精准复现该矩阵所描述的折痕图案。如果可以,输出 YES,否则输出 NO。
样例及解释
样例输入
1 | 2 |
样例输出
1 | YES |
样例解释
输入包含两个测试用例:
-
第一个测试用例给出了一个 即 的字符矩阵,代表一个 的网格。该图案是可以通过规定的折叠方法真实得到的折痕分布,因此输出
YES。 -
第二个测试用例给出了一个 的字符矩阵,代表一个 的网格。其四周的折痕全为
M(峰折),而在这种必须贯穿整张纸面进行折叠的规则下,无法在现实中构造出这样的折痕组合,因此输出NO。

给你一个这样的矩阵,问可不可能折纸做到?
思路讲解
AC代码
源代码
1 |