QOJ.ac

QOJ

Time Limit: 1.0 s Memory Limit: 1024 MB Total points: 100 Interactive

#17759. Snake

Statistics

这是一个交互式问题。请记得在每次输出后清空输出缓冲区。你可以使用以下方法清空输出:

  • C/C++ 中的 fflush(stdout)cout.flush()
  • Java 和 Kotlin 中的 System.out.flush()
  • Python 中的 sys.stdout.flush()

你正在一个大小为 $n \times m$ 的网格上玩经典的贪吃蛇游戏。行从上到下依次编号为 $1$ 到 $n$,列从左到右依次编号为 $1$ 到 $m$。我们用 $(i, j)$ 表示位于第 $i$ 行第 $j$ 列的单元格。

蛇可以表示为一个坐标对序列,用于确定其身体所在的位置:$(x_1, y_1), (x_2, y_2), \dots, (x_k, y_k)$。这里,$k$ 表示蛇的长度。蛇头位于 $(x_1, y_1)$,蛇尾位于 $(x_k, y_k)$,身体的相邻部分位于共享一条边的单元格中。

最初,蛇的长度为 $1$,位于给定的单元格 $(r_s, c_s)$。

有 4 种移动蛇的指令:

  • U:指挥蛇向上移动一步。蛇头将移动到 $(x_1 - 1, y_1)$。
  • D:指挥蛇向下移动一步。蛇头将移动到 $(x_1 + 1, y_1)$。
  • L:指挥蛇向左移动一步。蛇头将移动到 $(x_1, y_1 - 1)$。
  • R:指挥蛇向右移动一步。蛇头将移动到 $(x_1, y_1 + 1)$。

当蛇头移动时,身体的每个部分也随之移动。具体来说,身体的第 $i$ 部分($2 \le i \le k$)会移动到该指令执行前第 $i - 1$ 部分所在的位置。同时,原先被蛇尾占用的单元格变为空闲。

蛇不能移动到网格外部。此外,蛇不能与自身相撞——你必须保证在任何指令之后,身体的任意两个部分都不会占用同一个单元格。考虑以下边界情况:蛇头位于 $(x_1, y_1)$,蛇尾位于 $(x_k, y_k)$。如果蛇头正移动到 $(x'_1, y'_1)$,那么允许 $(x'_1, y'_1) = (x_k, y_k)$:如果考虑现实中的场景,蛇头移入该单元格的同时,蛇尾正好移出。类似地,当 $k = 2$ 时,允许通过单次指令交换蛇头和蛇尾的位置。

会有 $(nm - 1)$ 个苹果依次出现。每次,一个苹果会出现在当前未被蛇占用的某个单元格 $(r, c)$ 处。你需要输出一个指令序列,将蛇头移动到苹果所在的位置。蛇头必须在最后一条指令时恰好到达 $(r, c)$,并且在此之前不能进入 $(r, c)$。

对于你输出的每个指令序列,除最后一条指令外的每条指令都是普通移动:蛇尾会如上所述腾出其所在的单元格。序列中的最后一条指令是进食移动:当蛇头到达 $(r, c)$ 时,蛇会吃掉苹果。在这次移动中,蛇尾不会腾出其所在的单元格,因此蛇的长度增加 $1$。

你的任务是成功吃掉所有 $(nm - 1)$ 个苹果。

输入格式

每个测试点包含多个测试用例。输入的第一行包含一个整数 $T$($1 \le T \le 100$),表示测试用例的数量。对于每个测试用例:

第一行包含四个整数 $n$、$m$、$r_s$ 和 $c_s$($2 \le n, m \le 50$,$nm \le 100$,$1 \le r_s \le n$,$1 \le c_s \le m$),表示网格的大小和蛇的起始位置。

交互格式

你需要一个接一个地吃掉所有 $(nm - 1)$ 个苹果。对于每个苹果:

  • 读取一行,包含两个整数 $r$ 和 $c$($1 \le r \le n$,$1 \le c \le m$),表示苹果的位置。保证苹果的位置当前未被蛇占用。
  • 输出一个由字符 UDLR 组成的字符串——将蛇头从当前位置移动到 $(r, c)$ 的指令序列。为了增加问题的难度,我们限制该字符串的长度最多为 $nm$。

在打印每行后,请确保清空输出缓冲区。可以证明,答案总是存在。

样例

输入样例 1

2
2 3 1 2
2 1
1 3
2 1
1 1
1 2
2 2 1 1
2 2
1 1
1 2

输出样例 1

LD
URR
DLL
U
R
RD
LU
R

说明

下图展示了吃掉 3 个苹果后的第一个样例测试用例。

吃掉 3 个苹果后的第一个样例测试用例

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.