QOJ.ac

QOJ

実行時間制限: 1 s メモリ制限: 1024 MB 満点: 100

#514. 一丝不苟的填字游戏玩家

統計

填字游戏由一个网格组成,网格中放置着相互交叉的单词,每个方格填入一个字母。有些网格方格被涂黑,表示此处不应填入字母。解题者会收到每个单词的线索,每个线索由一个起始线索编号和“横向”(Across,用于水平单词)或“纵向”(Down,用于垂直单词)标识。每个可以作为单词起点的方格都会被赋予一个线索编号,编号从左上角开始,按行从左到右递增。如果一个方格的左侧是黑色方格或网格边界,则该方格包含一个横向线索编号;如果一个方格的上方是黑色方格或网格边界,则该方格包含一个纵向线索编号。简单示例见图 E.1。

图 E.1:填字游戏示例。

Will Longz 是一位狂热的填字游戏爱好者,和大多数解题者一样,他首先尝试解决那些已经填入部分字母的线索(这些字母来自已经解出的、与当前线索相交的线索)。通常,这些已知字母越靠近单词的开头越好。Will 开发了一种指标来帮助他决定解决线索的顺序。如果一个线索的答案跨越 $n$ 个方格,他将 $n$ 分配给第一个方格,$n-1$ 分配给第二个方格,依此类推,最后一个方格分配到 $1$。任何未解线索的排名定义如下:对于每个已经填有字母的方格,将其分配的值加到总和中。然后将此总和除以分配给该线索的所有值的总和,得到该线索的排名。完成所有线索的计算后,Will 会解决排名最高的线索。如果出现平局,他会优先选择横向线索而非纵向线索。如果仍然平局,他会选择起始线索编号最小的线索。每解决一个线索后,Will 都会重新计算排名,然后再选择下一个排名最高的线索。

例如,考虑图 E.1 中的填字游戏,其中 6-Across 线索(我们简称为 6A)已经解出。为了确定 1-Down (1D) 线索的排名,Will 首先为向下的每个方格分配值 3、2 和 1。由于最后一个方格中已有字母,该线索的排名为 $1/(3 + 2 + 1) = 1/6$。同样,他确定 2D 和 3D 的排名为 $2/10$,5D 的排名为 $2/6$。三个未解横向线索 1A、4A 和 7A 的排名均为 0。因此,下一个要解决的线索是 5D(我们保持乐观,始终假设 Will 可以解决任何线索)。一旦解出,4A 和 7A 的排名分别变为 $1/10$ 和 $1/6$。由于现在排名最高的线索(2D 和 3D)之间出现平局,且它们都是纵向线索,Will 会选择线索编号最小的纵向线索并解决 2D。以此类推,剩余线索按以下顺序解决(括号内为解出时的排名):7A (4/6)、4A (4/10)、3D (6/10) 和 1A (3/6)。注意,线索 5D 不在列表中,因为它已被之前解出的线索(即 4A、6A 和 7A)完全解出。

对于本题,你将获得一个填字游戏网格,其中包含零个或多个已填好的方格,你必须确定未解线索的解决顺序。已填好的方格可能对应也可能不对应完全解出的线索。最后一个转折点是:我们只会提供网格中的黑色方格和字母。你必须确定线索编号(我打赌 Will 能做到!)。

输入格式

输入的第一行包含两个整数 $r$ 和 $c$ ($1 \le r, c \le 50$),指定填字游戏网格的行数和列数。接下来是 $r$ 行,每行包含 $c$ 个字符,描述该谜题。每个字符要么是 '.'(表示空方格),要么是 '#'(表示黑色方格),要么是一个大写英文字母(表示已解出的方格)。网格中至少会有一个空方格。

输出格式

按顺序显示应解决的线索,每行一个,使用上述指标。每个线索应以线索编号开头,后跟字母 'A' 或 'D'(分别代表横向或纵向线索)。

样例

样例输入 1

4 4
...#
....
JAVA
#...

样例输出 1

5D
2D
7A
4A
3D
1A

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.