#P13570. [CCPC 2024 重庆站] 连方

[CCPC 2024 重庆站] 连方

题目背景

本题目来自仓库 https://github.com/Disposrestfully/CCPC-CQ-2024/tree/main

题目描述

给定正整数 nn 和两个仅包含字符 .# 的长度为 nn 的字符串 a,ba, b,请构造一个 7×n7\times n 的仅包含字符 .# 的矩阵,满足以下条件:

  • 矩阵第 11 行与 aa 相同,第 77 行与 bb 相同。
  • 由四方向连通的 # 构成的图形均为实心的矩形。具体地:
    • 对于两个 # 字符,如果可以从其中一个 # 字符出发,在有限步之内仅经过 # 字符到达另一个 # 字符,其中每一步均为向上、左、下、右四个方向之一移动一格,则称这两个 # 字符在同一组。那么,由同一组内的所有 # 字符构成的图形均为实心的矩形。
  • 所有的 # 字符八方向连通,具体地:
    • 对于任意两个 # 字符,均可以从其中一个 # 字符出发,在有限步之内仅经过 # 字符到达另一个 # 字符,其中每一步均为向上、左、下、右、左上、右上、左下、右下八个方向之一移动一格。

请输出任意一个满足条件的矩阵,或判定无解。

输入格式

输入的第一行包含一个正整数 T (1T104)T \ (1\le T \le 10^4),代表数据组数。

每组数据第一行包含一个正整数 n (2n105)n \ (2\le n \le 10^5),代表矩阵的宽度。

接下来两行分别包含仅包含字符 .#,长度为 nn 的两个字符串 a,ba, b,代表矩阵的第 11 行与第 77 行。

保证 aabb 均包含至少一个 #

保证单个测试点内所有 nn 的总和不超过 2×1052\times10^5

输出格式

对于每组测试数据,如果不存在满足要求的矩阵,则输出一行一个字符串 No

如果存在满足要求的矩阵,则先输出一行一个字符串 Yes,然后输出 77 行,每行包含一个长度为 nn 的字符串,代表你构造的矩阵。

4
4
#..#
.##.
5
##.#.
.#.##
6
######
.####.
27
.######.######.####.#.#####
.####...####..#.......#####
Yes
#..#
.##.
.##.
#..#
.##.
.##.
.##.
Yes
##.#.
##.#.
##.#.
..#..
.#.##
.#.##
.#.##
No
Yes
.######.######.####.#.#####
#......#......#....#.#.....
#......#......#....#.#.....
#......#.......####..#.....
#......#......#......#.....
#......#......#......#.....
.####...####..#.......#####

提示

对于第一组数据,以下是另一种正确答案:

#..#
#..#
#..#
.##.
#..#
#..#
.##.

但以下矩阵不是正确答案,因为由 (1,1)(2,1)(2,2)(1,1)(2,1)(2,2) 这组四方向连通的 # 字符构成的图形不是矩形。对于 (4,1)(4,2)(5,1)(6,1)(4,1)(4,2)(5,1)(6,1) 这组四方向连通的 # 字符同理。

#..#
##.#
..#.
##.#
#.#.
#..#
.##.

同样,以下矩阵也不是正确答案,因为位于 (1,1)(1,1)# 字符与其他 # 字符不满足八方向连通的条件。

#..#
...#
...#
...#
...#
...#
.##.