loj#P6933. 「ICPC World Finals 2023」倾斜方块

「ICPC World Finals 2023」倾斜方块

题目描述

你在阁楼上的一个旧玩具箱里发现了一个奇怪的玩具。这个玩具是一个由 h×wh \times w 个正方形单元格组成的长方形网格板。如图 F.1 所示,网格中的一些单元格上放置了一块彩色方块。

tile1.png

图 F.1. 样例 1 中初始的彩色方块排布

你还不确定这个玩具的确切目标是什么,但你已经开始研究重新排列方块的可能方法。可以通过将网格向左、向右、向着你或远离你的四个方向之一倾斜来实现让这些方块重排。倾斜会使所有方块向相应的方向滑动,直到被边界或其他方块挡住为止。给定一个起始和目标的方块排布,判断是否存在某种倾斜序列能将前者转化为后者。图 F.2 展示了样例 1 中所示玩具的倾斜过程。

tile2-zh.png

图 F.2. 样例 1 的解

输入格式

第一行输入包含两个整数 hhww1h,w5001 \le h, w \le 500),分别代表网格的高度和宽度。随后的 hh 行给出了从第一行到最后一行的初始排布。每一行都包含一个长度为 ww 的字符串,从左到右描述该行的单元格。如果单元格是空的,对应的字符就是一个点(.)。如果有一个方块,则给出该方块的颜色,用小写字母(a-z)表示。不同的字母代表不同的颜色,相同颜色的方块无法区分。

在初始排布之后是一个空行,然后是对目标排布的描述,由 hh 行组成,格式与初始排布相同。

输出格式

如果存在将初始排布转换为目标排布的倾斜序列,则输出 yes,否则输出 no

4 4
.r..
rgyb
.b..
.yr.

yrbr
..yr
...g
...b

yes

1 7
....x..

..x....

no

4 3
yr.
..b
ry.
b..

...
..b
.ry
byb
no