QOJ.ac

QOJ

时间限制: 1.0 s 内存限制: 1024 MB 总分: 100 可 Hack ✓

#8935. 谜题:像拼字游戏一样简单

统计

许多谜题变体往往比其对应的原始类型更难。但矛盾的是,正如有一个单词在增加两个字母后反而变短了一样,也存在一种变体能让任何类型变得更简单。 — Freddie Hand

Grammy 是一位谜题大师。今天,她正在玩一种名为“Scrabble”谜题的变体——“Easy as Scrabble”。 该谜题由一个 $n \times m$ 的网格组成。每个单元格应填入一个大写字母,或者留空。 谜题外围有一些线索。外围线索表示从该方向看去的第一个非空单元格中的字母。此外,某些单元格可能包含“x”标记,表示该单元格必须为空。

例如,左侧的图片展示了一个未解的谜题,右侧的图片展示了该谜题的一个解。

Grammy 想要找到该谜题的一个解。请帮助 Grammy 找到一个解,或者报告不存在解。

输入格式

第一行包含两个整数 $n, m$ ($1 \le n, m \le 1000$),表示网格的行数和列数。 下一行包含一个点(“.”),后跟 $m$ 个字符 $U_i$,表示网格上方的线索,最后再跟一个点(“.”)。 接下来的 $n$ 行,每行包含一个线索 $L_i$,后跟 $m$ 个字符 $c_{ij}$,再跟一个线索 $R_i$,分别表示网格左侧的线索、网格单元格以及网格右侧的线索。 下一行包含一个点(“.”),后跟 $m$ 个字符 $D_i$,表示网格下方的线索,最后再跟一个点(“.”)。 每个线索 $U_i, L_i, R_i, D_i$ 要么是一个大写英文字母,要么是一个点(“.”)。每个中心单元格 $c_{ij}$ 要么是“x”,要么是点(“.”)。 输入中的所有点表示相应位置为空。

输出格式

如果不存在解,输出一行“NO”。 否则,第一行输出“YES”,然后输出 $n$ 行,每行包含 $m$ 个字符,表示谜题的一个解。每个空单元格应表示为一个点。如果存在多个解,输出任意一个即可。 请注意,你需要将中心单元格中给定的“x”字符替换为点。 另请注意,你不应输出线索单元格。

样例

输入 1

5 5
.CBA...
....x..
..x...C
A.....B
B..x..A
C......
.......

输出 1

YES
CBA..
A.B.C
.A.CB
BC.A.
..CBA

输入 2

1 2
....
Nx..
..O.

输出 2

NO

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.