#aBC358F. [ABC358F] Easiest Maze

[ABC358F] Easiest Maze

AT_abc358_f [ABC358F] Easiest Maze

题目描述

すぬけ君打算在 AtCoder Land 建造一个新的迷宫作为亮点项目。迷宫可以表示为一个纵向 NN 行、横向 MM 列的网格,右上角格子的上边是入口,右下角格子的下边是出口。すぬけ君可以通过在相邻格子之间适当设置墙壁来构建迷宫。

すぬけ君非常喜欢简单的迷宫,因此他希望从入口到出口的路径没有任何分支,并且恰好经过 KK 个格子。请判断是否可以构建这样的迷宫,如果可以,请构建出其中一种方案。

例如,下图中 N=3,M=3N=3, M=3,实线表示墙壁的位置(除入口和出口外,外周必定有墙壁)。此时,从入口到出口的路径没有任何分支,且恰好经过了 77 个格子。

具体要求如下:

有一个纵向 NN 行、横向 MM 列的网格。第 ii 行第 jj 列的格子记为 (i,j)(i,j)。你可以决定是否在每对相邻格子之间放置墙壁。请判断是否可以通过合理设置墙壁,使得满足以下条件,并在可能的情况下给出一种构造方案。

考虑一个有 NMNM 个顶点的无向图 GGGG 的每个顶点用一对整数 (i,j) (1iN, 1jM)(i,j)\ (1\leq i\leq N,\ 1\leq j\leq M) 唯一标记。对于两个不同的顶点 (i1,j1),(i2,j2)(i_1,j_1),(i_2,j_2),如果 i1i2+j1j2=1|i_1-i_2|+|j_1-j_2|=1 且这两个格子之间没有墙壁,则它们之间有一条边。

条件:存在一条包含 KK 个顶点、连接 (1,M)(1,M)(N,M)(N,M) 的简单路径,并且包含 (1,M)(1,M)(N,M)(N,M) 的连通分量仅由这条路径组成。

输入格式

输入通过标准输入给出,格式如下:

NN MM KK

输出格式

如果不存在满足条件的墙壁配置,则输出 No。如果存在,则输出其中一种方案,格式如下。若有多种满足条件的墙壁配置,输出任意一种均可。

由于输出格式较为复杂,请参考下方的输出示例。

Yes +++++...+++S+ +o?o?...?o?o+ +?+?+...+?+?+ +o?o?...?o?o+ +?+?+...+?+?+ ⋮ +o?o?...?o?o+ +?+?+...+?+?+ +o?o?...?o?o+ +++++...+++G+

其中,SG+o 分别表示入口、出口、墙壁、格子。格子与格子之间的 ? 表示可以放置墙壁的位置。对于横向相邻的两个格子之间的 ?,若放置墙壁则用 |,不放则用 .。对于纵向相邻的两个格子之间的 ?,若放置墙壁则用 -,不放则用 .

具体说明如下:

  • 输出共 2N+22N+2 行,第 11 行输出字符串 Yes,第 22 行到第 2N+22N+2 行按如下方式输出,每行长度为 2M+12M+1
    • 22 行输出 2M12M-1+S+,依次连接。
    • 1+2i1+2i 行(1iN1\leq i\leq N):+oci,1c_{i,1}oci,2c_{i,2}\dotsci,M1c_{i,M-1}o+,依次连接。ci,jc_{i,j} 表示 (i,j)(i,j)(i,j+1)(i,j+1) 之间,若放墙壁则为 |,否则为 .
    • 2+2i2+2i 行(1iN11\leq i\leq N-1):+ri,1r_{i,1}+ri,2r_{i,2}+\dots+ri,Mr_{i,M}+,依次连接。ri,jr_{i,j} 表示 (i,j)(i,j)(i+1,j)(i+1,j) 之间,若放墙壁则为 -,否则为 .
    • 2N+22N+2 行输出 2M12M-1+G+,依次连接。

输入输出样例 #1

输入 #1

3 3 7

输出 #1

Yes
+++++S+
+o.o.o+
+.+-+-+
+o.o.o+
+-+-+.+
+o.o|o+
+++++G+

输入输出样例 #2

输入 #2

3 3 2

输出 #2

No

输入输出样例 #3

输入 #3

4 1 4

输出 #3

Yes
+S+
+o+
+.+
+o+
+.+
+o+
+.+
+o+
+G+

说明/提示

数据范围

  • 2N1002\leq N \leq 100
  • 1M1001\leq M \leq 100
  • 1KNM1\leq K\leq NM
  • 输入均为整数

样例解释 1

与题目描述中的图示墙壁配置相同。

由 ChatGPT 4.1 翻译