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` 是矩阵具体行的描述。

说明/提示

在第一个测试案例中,所有四个方向都换成了它们的反方向。交互协议的说明如下: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF811D/950006bce8e634504ab933f77783747c37b83110.png) 这次测试的黑客攻击可以如下描述: ``` 4 3 1 1 ... **. F*. ... ``` **本翻译由 AI 自动生成**