#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 的足迹在你的探索过程中始终保持不变。

交互格式

交互开始时,你会从标准输入读入一个整数 nn,后接换行。

整数 nn 表示这片区域被划分为 (2n+1)×(2n+1)(2n+1)\times(2n+1) 个方格。你最初位于从西往东第 n+1n+1 个、从北往南第 n+1n+1 个方格,也就是整个区域的中心方格。

读入整数 nn 后,你可以开始探索。

每一步,你需要向标准输出输出一个字符,表示你要移动到的相邻方格方向:

  • ^:向北移动;
  • <:向西移动;
  • v:向南移动;
  • >:向东移动。

该字符后必须输出换行。

每次移动后,你会从标准输入读入一个字符,表示你到达的方格中的内容,后接换行:

  • G:该方格中有宝藏;
  • ^:John 的足迹指向北方;
  • <:John 的足迹指向西方;
  • v:John 的足迹指向南方;
  • >:John 的足迹指向东方;
  • .:该方格中既没有宝藏,也没有足迹。

当你找到宝藏,也就是读入字符 G 时,交互立即结束,你的程序应当终止。

限制与判错条件

你必须在 3000030000 步以内到达宝藏方格。虽然沿着 John 的足迹一定能找到宝藏,但所需步数可能超过 3000030000

如果出现以下任意情况,你的程序会被判为错误:

  • 输出格式非法;
  • 指定了会移出网格的方向;
  • 找到宝藏后仍继续输出额外内容;
  • 没能在 3000030000 步以内到达宝藏方格。

区域的布局,也就是宝藏位置和 John 的足迹位置,在交互开始前已经固定,在交互过程中不会改变。

由于某些环境需要刷新输出缓冲区,请确保你的输出确实发送给了交互器。否则,交互器将无法收到你的输出。

例如,C++ 中可以使用:

cout << c << endl;

或者:

cout << c << '\n' << flush;

数据范围

1n20001\le n\le 2000

网格大小为 (2n+1)×(2n+1)(2n+1)\times(2n+1)

样例交互

下面的交互假设局面如图 G-1 所示。

读入 输出
2
^
^
<
.
v
<
<
^
^
G

在这个交互中,程序最终移动到了宝藏方格。

样例测试数据

下面给出一组与上方样例交互对应的测试数据文件内容。注意:这是交互器读取的完整地图,选手程序实际只能先读到第一行的 n,之后通过移动指令逐步获得每个到达方格的反馈。

001.in

2
..>v.
G.^>v
^<^.v
.^..v
.^<<<

001.ans


本题交互器不依赖 .ans 文件内容,因此样例答案文件可以为空。