#P16581. [Euc2024]Amanda the Amoeba

[Euc2024]Amanda the Amoeba

题目描述

变形虫阿曼达生活在一个由正方形像素组成的矩形网格中。她的身体占据其中一些像素,其他像素可能是空闲像素或障碍像素。

阿曼达通过所谓的“变形虫运动”移动。每一步运动包含两个阶段:

  1. 身体先缩小一个像素:移除一个身体像素,该像素变为空闲像素;
  2. 随后身体在另一个位置增长:把一个此前为空闲的像素加入身体。

为了避免结构损伤,阿曼达的身体必须始终占据一个连通区域。也就是说,身体中的任意两个像素都能通过只经过身体像素的相邻路径相连。两个共享一条边的像素视为相邻,每个像素最多有 44 个相邻像素。

身体在运动的整个过程中都必须保持连通,包括移除一个像素之后、加入另一个像素之前的中间时刻

给定阿曼达的初始位置和目标位置,请构造一系列合法移动,使她从初始位置变为目标位置。

原题附带了一个用于模拟和可视化移动过程的程序,但解题不依赖该附件。

样例 1 的初始与目标位置

图中实心区域表示初始位置,虚线围成的区域表示目标位置。

输入格式

第一行包含两个整数 r,cr,c1r,c501\le r,c\le 50),表示网格的行数和列数。

接下来 rr 行,每行包含 cc 个字符,描述阿曼达的初始位置:

  • .:空闲像素;
  • *:阿曼达身体的一部分;
  • X:障碍像素,永远不能被占据。

接下来一行为空行。

再接下来 rr 行,以相同格式描述目标位置。

保证:

  • 初始位置和目标位置中,身体像素数量相同,且至少为 22
  • 初始位置中的身体连通;
  • 目标位置中的身体连通;
  • 两份描述中的障碍像素完全相同。

输出格式

若无法从初始位置移动到目标位置,输出 NO

否则输出 YES,然后在下一行输出一个整数 mm0m100000\le m\le 10000),表示移动次数。

接下来 mm 行,每行输出四个整数

i1,j1,i2,j2i_1,j_1,i_2,j_2

其中 1i1,i2r1\le i_1,i_2\le r1j1,j2c1\le j_1,j_2\le c。这一行表示一次移动:

  1. 先从身体中移除第 i1i_1 行、第 j1j_1 列的像素;
  2. 再把第 i2i_2 行、第 j2j_2 列的像素加入身体。

两个位置必须不同。每一步都必须合法,最后身体必须恰好占据目标位置。

若存在多种方案,输出任意一种。

可以证明,在本题条件下,只要存在方案,就一定存在移动次数不超过 1000010000 的方案。

样例 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

说明

阿曼达通过 55 次移动到达目标位置,过程如下图所示。

样例 1 的移动过程

样例 2

输入

2 5
*.X..
**X..

..X**
..X*.

输出

NO