CF811D Vladik and Favorite Game
题目描述
这是一个交互式的问题。
Vladik 在空闲时间最喜欢玩一个游戏。
游戏的场地用一个 $n \times m$ 的矩阵显示,每个格子分为三种类型:
- 「.」—— 普通格子,玩家可以踩上去。
- 「F」—— 终点格子,玩家需要到达这里才能赢得游戏。这里只有一个这样的格子。
- 「*」—— 危险格子,踩到这里会导致游戏失败。
游戏一开始,玩家位于左上角格子 $(1,1)$。
玩家可以通过四个按钮「U」、「D」、「L」、「R」来分别向上、下、左、右移动。
然而并没有那么简单!有时玩家的朋友会调换按钮的功能。「L」和「R」可能会互换,同样的,「U」和「D」也可能会互换。需注意,按钮功能的改变只能在游戏开始时进行。
请帮助 Vladik 赢得这场游戏吧!
输入格式
第一行包含两个整数 $n$ 和 $m$,用空格分开($1 \leq n, m \leq 100$),分别代表矩阵的行数和列数。
接下来的 $n$ 行每行有 $m$ 个字符,表示对应行的格子类型。前面已经说明了这些字符类型。
保证坐标 $(1,1)$ 是普通格子,并且从起始点到终点格子之间,至少有一条不经过危险格子的路径。
输出格式
你最多可以按按钮 $2 \times n \times m$ 次。
每按一次按钮,你需要在新的一行输出「U」、「D」、「L」或「R」。然后需要刷新输出缓冲区。刷新后,你会从输入读取玩家位置更新信息,包括两个整数 $x$ 和 $y$,表示玩家的新位置。如果移动的方向没有相邻格子,位置不变。如果玩家进入了危险格子,$x$ 和 $y$ 将会变为 $-1$。
一旦玩家进入了终点格子或者危险格子,你的程序就应终止。
为刷新输出缓冲区,在打印了方向和换行后,你需执行以下操作:
- C++:`fflush(stdout)`
- Java:`System.out.flush()`
- Python:`stdout.flush()`
- Pascal:`flush(output)`
- 其他语言请参考相关文档。
### 黑客攻击
想要进行黑客攻击,应使用以下格式:
```
n m swapLR swapUD
a_1
a_2
...
a_n
```
这里,$n$ 和 $m$ 是矩阵的行列数。`swapLR` 表示「L」和「R」方向是否已交换,1 为已交换,0 为未交换。`swapUD` 表示「U」和「D」是否已交换,1 为已交换,0 为未交换。`a_1, a_2, ..., a_n` 是矩阵具体行的描述。
说明/提示
在第一个测试案例中,所有四个方向都换成了它们的反方向。交互协议的说明如下:

这次测试的黑客攻击可以如下描述:
```
4 3 1 1
...
**.
F*.
...
```
**本翻译由 AI 自动生成**