#HK6982. 「ICPC World Finals 2024」我现在在哪里?

「ICPC World Finals 2024」我现在在哪里?

题目描述

我是谁?我是何物?为何存在?这些都是过去几千年让哲学家们忙碌不休的难题。但说到「我在哪里?」这个问题,嗯,现代智能手机和 GPS 卫星已经让它变得索然无味。

但如果你手头没有 GPS 呢?在 2021 年世界决赛的一道题目中,瞬时制图定位公司(ICPC)展示了一种通过螺旋移动和观察周围环境来确定当前位置的方法。不幸的是,他们的方法只能在没有障碍物的开阔区域使用。如果需要在封闭空间中确定你的确切位置,你该怎么办呢?现在是时候找答案了。

你会得到一个由单位方格组成的区域地图,每个方格要么是开放的,要么被墙占用。一开始,你被放置在其中一个开放的单位方格中,但你不知道自己具体在哪个方格,也不知道自己面向哪个方向。任何两个独立的开放空间是无法区分的,墙也是如此。你可以在区域内走动,每一步观察你面向方向上到下一堵墙的距离。目标是确定你在地图上的确切位置。

交互方式

输入的第一行包含两个整数 rrcc (1r,c100)(1 \leq r, c \leq 100),指定地图的大小。接下来有 rr 行,每行包含 cc 个字符。每个字符要么是一个点(.),表示开放的方格;要么是一个井号(#),表示被墙占用的方格。

地图上至少有一个方格是开放的。你知道自己从地图上的某个开放方格开始,面向四个基本方向之一,但你的位置和方向未在输入中给出。地图区域外的所有方格都被视为墙。

交互随后以轮次进行。每一轮会提供一行输入,包含一个整数 dd (0d99)(0 \leq d \leq 99),表示你看到前方距离 dd 处有一堵墙。这意味着在你当前方向上,你所在的方格与最近的墙之间恰好有 dd 个开放方格。然后你应输出一行,内容如下之一:

  • left:向左旋转 90 度,
  • right:向右旋转 90 度,
  • step:在当前方向上前进一步,
  • yes i j:声明你当前的位置是第 ii 行第 jj(1ir,1jc)(1 \leq i \leq r, 1 \leq j \leq c)
  • no:声明无论你做什么,都无法可靠地确定你的位置。

如果你输出 yesno,交互将停止,你的程序应终止。否则,将开始新一轮交互。为了获得 AC,你不能走进墙内,并且最多只能进行 100000100\,000 轮交互(最后一轮仅报告 yesno 也计入此限制)。

样例 1

输入 输出
3 3
##.
#..
...
1
right
1
step
0
left
0
right
0
right
1
yes 2 2

样例 2

输入 输出
3 5
##.##
###.#
.#.##
0
left
0
no

样例 3

输入 输出
2 1
#
.
0
yes 2 1