P15475 [ICPC 2024 WF] Where Am I Now? 我现在在哪里?

题目背景

5s 2048MB 翻译来源:loj #6982. [「ICPC World Finals 2024」我现在在哪里?](https://loj.ac/p/6982)。

题目描述

我是谁?我是何物?为何存在?这些都是过去几千年让哲学家们忙碌不休的难题。但说到「我在哪里?」这个问题,嗯,现代智能手机和 GPS 卫星已经让它变得索然无味。 但如果你手头没有 GPS 呢?在 2021 年世界决赛的一道题目中,瞬时制图定位公司(ICPC)展示了一种通过螺旋移动和观察周围环境来确定当前位置的方法。不幸的是,他们的方法只能在没有障碍物的开阔区域使用。如果需要在封闭空间中确定你的确切位置,你该怎么办呢?现在是时候找答案了。 你会得到一个由单位方格组成的区域地图,每个方格要么是开放的,要么被墙占用。一开始,你被放置在其中一个开放的单位方格中,但你不知道自己具体在哪个方格,也不知道自己面向哪个方向。任何两个独立的开放空间是无法区分的,墙也是如此。你可以在区域内走动,每一步观察你面向方向上到下一堵墙的距离。目标是确定你在地图上的确切位置。

输入格式

### 交互方式 输入的第一行包含两个整数 $r$ 和 $c$ $(1 \leq r, c \leq 100)$,指定地图的大小。接下来有 $r$ 行,每行包含 $c$ 个字符。每个字符要么是一个点(`.`),表示开放的方格;要么是一个井号(`#`),表示被墙占用的方格。 地图上至少有一个方格是开放的。你知道自己从地图上的某个开放方格开始,面向四个基本方向之一,但你的位置和方向未在输入中给出。地图区域外的所有方格都被视为墙。 交互随后以轮次进行。每一轮会提供一行输入,包含一个整数 $d$ $(0 \leq d \leq 99)$,表示你看到前方距离 $d$ 处有一堵墙。这意味着在你当前方向上,你所在的方格与最近的墙之间恰好有 $d$ 个开放方格。然后你应输出一行,内容如下之一: - `left`:向左旋转 90 度, - `right`:向右旋转 90 度, - `step`:在当前方向上前进一步, - `yes i j`:声明你当前的位置是第 $i$ 行第 $j$ 列 $(1 \leq i \leq r, 1 \leq j \leq c)$, - `no`:声明无论你做什么,都无法可靠地确定你的位置。 如果你输出 `yes` 或 `no`,交互将停止,你的程序应终止。否则,将开始新一轮交互。为了获得 AC,你不能走进墙内,并且最多只能进行 $100\,000$ 轮交互(最后一轮仅报告 `yes` 或 `no` 也计入此限制)。

输出格式

说明/提示

![](https://cdn.luogu.com.cn/upload/image_hosting/q8nrprj3.png)