QOJ.ac

QOJ

Límite de tiempo: 3.0 s Límite de memoria: 512 MB Puntuación total: 100

#12701. ASCII 拼图

Estadísticas

Fili 和 Floi 在玩一个拼图游戏。Fili 拿出一张长方形纸片,上面画有 $W \times H$ 的方格网,他沿着网格线将其剪成若干碎片,并小心地将碎片打乱,使得碎片不会发生旋转。Floi 需要在不旋转碎片的情况下将它们重新拼回长方形。

Fili 在将原始纸片剪成碎片时遵循一些约束,以确保拼图是“良构”的。首先,Fili 选择三个整数 $w, h$ 和 $n$,使得原始长方形纸片的宽度为 $W = wn$,高度为 $H = hn$。这里 $w$ 和 $h$ 对 Floi 是已知的,但 $n, W$ 和 $H$ 未知。这样,原始长方形纸片可以被剪成 $k = n^2$ 个宽度为 $w$、高度为 $h$ 的平凡矩形。然而,对于 $k > 1$ 的情况,这种平凡拼图不被视为本游戏的良构拼图。相反,原始长方形被剪成的碎片是基于这些平凡的 $w \times h$ 矩形,并在相邻碎片之间具有锯齿状边缘。形式上,原始 $W \times H$ 纸片被剪成的碎片需满足以下良构拼图的约束:

  • 共有 $k = n^2$ 个碎片。
  • 每个碎片都是一个没有孔的简单 4-连通区域。
  • 原始 $W \times H$ 长方形纸片的每个格子恰好属于一个碎片。
  • 每个碎片都包含原始纸片对应平凡拼图中 $w \times h$ 矩形的四个角。
  • 每个碎片的格子只能来自其对应的平凡拼图 $w \times h$ 矩形、与该矩形相邻的格子,以及相邻平凡矩形内部的格子。
  • 两个相邻碎片之间的切割线不能是直的。只有位于原始 $W \times H$ 纸片边缘的碎片才具有直边。

这些约束的推论是,良构拼图的每个碎片都可以放入一个 $(3w - 2) \times (3h - 2)$ 的格子区域内。此外,每个碎片的描述将以 $(3w - 2) \times (3h - 2)$ 的网格形式给出,使得平凡拼图中对应的 $w \times h$ 矩形恰好位于中心。

左侧图片展示了一个示例长方形纸片,其网格大小为 $W \times H = 12 \times 9$,并用粗虚线剪成了 $k = 9$ 个宽度为 $w = 4$、高度为 $h = 3$ 的平凡矩形。该平凡拼图中中心 $3 \times 4$ 碎片的角用黑色标出。它们必须是任何良构拼图中中心碎片的一部分。良构拼图中中心碎片的其他潜在格子用灰色标出。粗黑线显示了将描述此中心碎片的 $(3w - 2) \times (3h - 2) = 10 \times 7$ 的长方形区域。右侧图片展示了拼图右上角碎片的情况。

你的任务是帮助 Floi 完成拼图。

输入格式

输入文件的第一行包含三个整数 $k, w$ 和 $h$。其中 $k$ 是拼图碎片的数量,$w$ 是平凡拼图碎片的宽度,$h$ 是高度($k = n^2$,其中 $1 \le n \le 4$,$3 \le w, h \le 5$)。

输入文件的其余部分包含 $k$ 个良构拼图碎片的描述。每个碎片由 $3h - 2$ 行描述,每行包含 $3w - 2$ 个字符。碎片按连续的大写英文字母标记(第 1 个碎片为 'A',第 2 个碎片为 'B',依此类推)。每个碎片的描述在其 $3h - 2$ 行中仅使用两个字符。对应于该碎片的英文字母表示该格子属于此碎片,而 '.'(点)字符表示该格子不属于此碎片。

空行分隔不同的碎片。

输出格式

输出文件的第一行应包含 $W$ 和 $H$ —— 被剪成拼图碎片的原始纸片的大小。接下来的 $H$ 行应各包含 $W$ 个英文字母,描述拼图的解。字母表示属于相应拼图碎片的格子。如果存在多种解法,输出任意一种即可。

样例

输入格式 1

4 4 3
..........
..........
...AAAA...
...AAAAAA.
...A.AA...
..........
..........
..........
..........
...BBBB...
.....BB...
...BBBB...
....BB....
.....B....
..........
..........
...C..C...
..CCC.C...
...CCCC...
..........
..........
..........
....D.....
...DDDD...
...DDD....
...DDDD...
..........
..........

输出格式 1

8 6
AAAABBBB
AAAAAABB
ADAABBBB
DDDDCBBC
DDDCCCBC
DDDDCCCC

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.