#P16581. [Euc2024]Amanda the Amoeba
[Euc2024]Amanda the Amoeba
题目描述
变形虫阿曼达生活在一个由正方形像素组成的矩形网格中。她的身体占据其中一些像素,其他像素可能是空闲像素或障碍像素。
阿曼达通过所谓的“变形虫运动”移动。每一步运动包含两个阶段:
- 身体先缩小一个像素:移除一个身体像素,该像素变为空闲像素;
- 随后身体在另一个位置增长:把一个此前为空闲的像素加入身体。
为了避免结构损伤,阿曼达的身体必须始终占据一个连通区域。也就是说,身体中的任意两个像素都能通过只经过身体像素的相邻路径相连。两个共享一条边的像素视为相邻,每个像素最多有 个相邻像素。
身体在运动的整个过程中都必须保持连通,包括移除一个像素之后、加入另一个像素之前的中间时刻。
给定阿曼达的初始位置和目标位置,请构造一系列合法移动,使她从初始位置变为目标位置。
原题附带了一个用于模拟和可视化移动过程的程序,但解题不依赖该附件。

样例 1 的初始与目标位置
图中实心区域表示初始位置,虚线围成的区域表示目标位置。
输入格式
第一行包含两个整数 (),表示网格的行数和列数。
接下来 行,每行包含 个字符,描述阿曼达的初始位置:
.:空闲像素;*:阿曼达身体的一部分;X:障碍像素,永远不能被占据。
接下来一行为空行。
再接下来 行,以相同格式描述目标位置。
保证:
- 初始位置和目标位置中,身体像素数量相同,且至少为 ;
- 初始位置中的身体连通;
- 目标位置中的身体连通;
- 两份描述中的障碍像素完全相同。
输出格式
若无法从初始位置移动到目标位置,输出 NO。
否则输出 YES,然后在下一行输出一个整数 (),表示移动次数。
接下来 行,每行输出四个整数
其中 ,。这一行表示一次移动:
- 先从身体中移除第 行、第 列的像素;
- 再把第 行、第 列的像素加入身体。
两个位置必须不同。每一步都必须合法,最后身体必须恰好占据目标位置。
若存在多种方案,输出任意一种。
可以证明,在本题条件下,只要存在方案,就一定存在移动次数不超过 的方案。
样例 1
输入
5 8
.******.
**.X**..
*******.
**.X**..
.******.
.******.
...X****
.*******
...X****
.******.
输出
YES
5
3 1 3 8
2 1 2 8
4 1 4 8
2 2 4 7
4 2 2 7
说明
阿曼达通过 次移动到达目标位置,过程如下图所示。

样例 1 的移动过程
样例 2
输入
2 5
*.X..
**X..
..X**
..X*.
输出
NO