P13570 [CCPC 2024 重庆站] 连方
题目背景
本题目来自仓库 https://github.com/Disposrestfully/CCPC-CQ-2024/tree/main
题目描述
给定正整数 $n$ 和两个仅包含字符 `.` 和 `#` 的长度为 $n$ 的字符串 $a, b$,请构造一个 $7\times n$ 的仅包含字符 `.` 与 `#` 的矩阵,满足以下条件:
- 矩阵第 $1$ 行与 $a$ 相同,第 $7$ 行与 $b$ 相同。
- 由四方向连通的 `#` 构成的图形均为**实心的**矩形。具体地:
- 对于两个 `#` 字符,如果可以从其中一个 `#` 字符出发,在有限步之内仅经过 `#` 字符到达另一个 `#` 字符,其中每一步均为向**上、左、下、右四个方向**之一移动一格,则称这两个 `#` 字符在同一组。那么,由同一组内的所有 `#` 字符构成的图形均为**实心的**矩形。
- 所有的 `#` 字符八方向连通,具体地:
- 对于任意两个 `#` 字符,均可以从其中一个 `#` 字符出发,在有限步之内仅经过 `#` 字符到达另一个 `#` 字符,其中每一步均为向**上、左、下、右、左上、右上、左下、右下八个方向**之一移动一格。
请输出任意一个满足条件的矩阵,或判定无解。
输入格式
输入的第一行包含一个正整数 $T \ (1\le T \le 10^4)$,代表数据组数。
每组数据第一行包含一个正整数 $n \ (2\le n \le 10^5)$,代表矩阵的宽度。
接下来两行分别包含仅包含字符 `.` 与 `#`,长度为 $n$ 的两个字符串 $a, b$,代表矩阵的第 $1$ 行与第 $7$ 行。
保证 $a$ 与 $b$ 均包含至少一个 `#`。
保证单个测试点内所有 $n$ 的总和不超过 $2\times10^5$。
输出格式
对于每组测试数据,如果不存在满足要求的矩阵,则输出一行一个字符串 `No`。
如果存在满足要求的矩阵,则先输出一行一个字符串 `Yes`,然后输出 $7$ 行,每行包含一个长度为 $n$ 的字符串,代表你构造的矩阵。
说明/提示
对于第一组数据,以下是另一种正确答案:
```
#..#
#..#
#..#
.##.
#..#
#..#
.##.
```
但以下矩阵不是正确答案,因为由 $(1,1)(2,1)(2,2)$ 这组四方向连通的 `#` 字符构成的图形不是矩形。对于 $(4,1)(4,2)(5,1)(6,1)$ 这组四方向连通的 `#` 字符同理。
```
#..#
##.#
..#.
##.#
#.#.
#..#
.##.
```
同样,以下矩阵也不是正确答案,因为位于 $(1,1)$ 的 `#` 字符与其他 `#` 字符不满足八方向连通的条件。
```
#..#
...#
...#
...#
...#
...#
.##.
```