#P12529. [ICPC 2024 Yokohama R] Beyond the Former Explorer
[ICPC 2024 Yokohama R] Beyond the Former Explorer
题目背景
本题为交互题。
你站在一片区域的正中心,这片区域被南北方向和东西方向的网格线划分为若干个方格。某个方格中藏着一份巨大的宝藏。
John Belzoni 是著名宝藏猎人 Giovanni Battista Belzoni 的后裔,他实际上已经发现了这份宝藏。不幸的是,他还没来得及挖出宝藏,就因中暑去世了;看起来,他在这片区域中徘徊了太久。
John 的探索从你现在所在的中心方格开始。通向宝藏的所有足迹都留在了这片区域里,但你只有到达某个方格时,才能识别该方格上的足迹。一个方格上的足迹会指示 John 下一步走向四个相邻方格中的哪一个。已知 John 不会重复访问同一个方格。你在中心方格看到一个足迹,表明 John 的第一步是向北。
这片区域中恰好有一个宝藏方格,并且只有当你站在这个方格上时,你才能识别出宝藏。

上图给出了一种可能的局面。John 的足迹用方格中的箭头表示,宝藏方格用 G 表示,阴影方格表示你的初始位置。
题目描述
你的任务是在有限步数内找到宝藏。
每一步中,你可以选择向北、西、南、东四个方向之一移动到相邻方格。移动到一个方格后,你可能会发现宝藏、John 的足迹,或者什么也没有。
你不需要沿着 John 的足迹前进。与 John 的路线不同,你可以多次访问同一个方格。John 的足迹在你的探索过程中始终保持不变。
交互格式
交互开始时,你会从标准输入读入一个整数 ,后接换行。
整数 表示这片区域被划分为 个方格。你最初位于从西往东第 个、从北往南第 个方格,也就是整个区域的中心方格。
读入整数 后,你可以开始探索。
每一步,你需要向标准输出输出一个字符,表示你要移动到的相邻方格方向:
^:向北移动;<:向西移动;v:向南移动;>:向东移动。
该字符后必须输出换行。
每次移动后,你会从标准输入读入一个字符,表示你到达的方格中的内容,后接换行:
G:该方格中有宝藏;^:John 的足迹指向北方;<:John 的足迹指向西方;v:John 的足迹指向南方;>:John 的足迹指向东方;.:该方格中既没有宝藏,也没有足迹。
当你找到宝藏,也就是读入字符 G 时,交互立即结束,你的程序应当终止。
限制与判错条件
你必须在 步以内到达宝藏方格。虽然沿着 John 的足迹一定能找到宝藏,但所需步数可能超过 。
如果出现以下任意情况,你的程序会被判为错误:
- 输出格式非法;
- 指定了会移出网格的方向;
- 找到宝藏后仍继续输出额外内容;
- 没能在 步以内到达宝藏方格。
区域的布局,也就是宝藏位置和 John 的足迹位置,在交互开始前已经固定,在交互过程中不会改变。
由于某些环境需要刷新输出缓冲区,请确保你的输出确实发送给了交互器。否则,交互器将无法收到你的输出。
例如,C++ 中可以使用:
cout << c << endl;
或者:
cout << c << '\n' << flush;
数据范围
网格大小为 。
样例交互
下面的交互假设局面如图 G-1 所示。
| 读入 | 输出 |
|---|---|
2 |
|
^ |
|
^ |
|
< |
|
. |
|
v |
|
< |
|
< |
|
^ |
|
^ |
|
G |
在这个交互中,程序最终移动到了宝藏方格。
样例测试数据
下面给出一组与上方样例交互对应的测试数据文件内容。注意:这是交互器读取的完整地图,选手程序实际只能先读到第一行的 n,之后通过移动指令逐步获得每个到达方格的反馈。
001.in
2
..>v.
G.^>v
^<^.v
.^..v
.^<<<
001.ans
本题交互器不依赖 .ans 文件内容,因此样例答案文件可以为空。