QOJ.ac

QOJ

時間限制: 3 s 記憶體限制: 1024 MB 總分: 100 互動

#3924. 地下城漫步者

统计

糟糕!邪恶的巫师 Nocoproco 抓住了你,并将你关进了他的地牢,这里没有出口。看起来你得在这里待上一段时间了,所以你最好利用这段时间好好探索一下这个地方。幸运的是,地牢里没有潜伏的怪物,所以探索应该相对安全。但仍然存在一些复杂情况。

地牢中最多可能有两扇隐藏的活板门。走进活板门会让你掉下去,并最终到达地牢的不同部分。更糟糕的是,地牢里几乎没有什么显著特征,所以你无法立即识别出之前访问过的位置,很容易迷失方向。不过,你有着敏锐的方向感,总是能分辨出哪个方向是北方。

地牢是一个矩形网格,每个单元格要么是墙壁、普通的开放空间,要么是活板门。在开放空间中,在昏暗的灯光下,你唯一能辨别的是四个相邻单元格(北、东、南、西方向)中哪些是墙壁,然后你可以走到任何不是墙壁的相邻单元格。如果你走进一扇活板门,你会在反应过来之前就掉进去,但在掉落之前,你有时间观察活板门相邻的四个单元格。

从地牢中的任何位置都可以到达任何其他位置(但可能需要使用活板门,如下面的样例交互 1 所示)。地牢也由一个单一区域组成——如果将活板门换成普通的开放空间,仍然可以从任何位置到达任何其他位置。活板门的终点可以在地牢中的任何开放空间,但不能在另一个活板门上,且两扇活板门的终点不在同一位置。你的起点既不是活板门,也不是活板门的终点。

编写一个程序来探索地牢并绘制完整的地图。

交互

这是一个交互式问题,按轮次进行。在每一轮交互中,你的程序首先读取有关你当前周围环境的信息,然后通过采取行动进行响应。

有关你当前周围环境的信息在单行上给出。该行以四个字符 $c_N, c_E, c_S$ 和 $c_W$ 开头,描述了你刚刚走进的单元格(或者对于第一轮,是起始单元格)在北、东、南、西方向上的周围环境。每个字符要么是 ‘#’,表示该方向上的单元格是墙壁;要么是 ‘.’,表示你可以走到那里。然后,同一行上会跟随单词 “trap”(如果你走进的单元格是活板门)或 “ok”(如果不是)。如果该单元格是活板门,该行还会包含第三个字符串,以与上述相同的格式描述活板门终点的周围环境。

有两种类型的操作:移动到相邻单元格,以及报告你已完成。要移动到相邻单元格,输出一行,包含 ‘N’、‘E’、‘S’ 和 ‘W’ 中的一个,分别对应向北、东、南、西移动。要报告你已完成,输出一行包含 “done”,随后是地牢的完整地图。将地图输出为最小尺寸的矩形网格,包括所有已见的墙壁。首先输出一行,包含两个整数 $h$ 和 $w$,表示网格的高度和宽度。然后输出 $h$ 行(从北到南),每行包含恰好 $w$ 个字符(从西到东),使用以下符号:

  1. ‘#’ 表示墙壁,以及地牢外其他无法到达的单元格。
  2. ‘S’ 表示你的起始位置。
  3. ‘A’ 和 ‘B’ 表示两扇活板门的位置。
  4. ‘a’ 和 ‘b’ 表示两扇活板门对应的终点位置。
  5. ‘.’ 表示其余可走动的单元格。

将哪扇活板门标记为 ‘A’ 以及哪扇标记为 ‘B’ 并不重要,只要 ‘a’ 是标记为 ‘A’ 的活板门的终点,‘b’ 同理即可。如果只有一扇活板门,你可以将其标记为 ‘A’ 或 ‘B’。输出地图后,交互结束,你的程序应该退出。

地牢中最多有 500 个可到达的位置。你的解决方案最多可以采取 $10^5$ 步。如果你试图走进墙壁,你的程序将被判定为 Wrong Answer。为了方便测试你的解决方案,我们提供了一个简单的工具,你可以从该问题的 Kattis 页面下载。记得在每次操作后刷新你的标准输出缓冲区!

样例

样例输入 1

#.#. ok
#.#. trap .###
##.. trap #.##
#.#. ok
#.#. ok
#.#. trap .###

样例输出 1

E
N
E
E
E
done
4 7
#######
#b.SAB#
#####a#
#######

样例输入 2

.##. ok
..## ok
#..# ok
##.. ok

样例输出 2

W
N
E
done
4 4
####
#..#
#.S#
####

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.