QOJ.ac

QOJ

実行時間制限: 2.0 s メモリ制限: 1024 MB 満点: 100

#14306. 机器人

統計

这是一个交互式问题。

一个淘气的机器人正在一个无限大的二维网格中导航。然而,它的移动被限制在第一象限,这意味着它的坐标 $(x, y)$ 必须始终满足 $x > 0$ 且 $y > 0$。最初,机器人位于网格坐标 $(s_x, s_y)$ 处。所有网格单元格最初都是白色的。

游戏在离散的时间步中进行,最多进行 $T = 1000$ 步。在每个时间步中,会发生以下顺序的事件:

  1. 你的移动:你选择整数坐标 $(x_m, y_m)$,满足 $1 \le x_m \le T$ 且 $1 \le y_m \le T$。然后你将该单元格标记为黑色。一个单元格一旦被标记为黑色,在游戏的余下时间里都将保持黑色。你可以标记该范围内的任何单元格,包括机器人当前所在的单元格。
  2. 机器人的移动:当前位于位置 $(r_x, r_y)$ 的机器人观察网格(包括你刚刚标记为黑色的单元格)。它知道所有当前为黑色的单元格的位置。然后它移动到一个新位置 $(n_x, n_y)$。新位置 $(n_x, n_y)$ 必须是与 $(r_x, r_y)$ 相邻(水平、垂直或对角线方向)的 8 个单元格之一。也就是说,$|n_x - r_x| \le 1$ 且 $|n_y - r_y| \le 1$,并且 $(n_x, n_y) \neq (r_x, r_y)$。此外,机器人必须留在第一象限内,因此 $n_x > 0$ 且 $n_y > 0$。交互器(控制机器人)将为机器人选择一个合法的移动。机器人的策略对你来说是未知的。
  3. 结果检查:在机器人移动到 $(n_x, n_y)$ 之后,系统检查单元格 $(n_x, n_y)$ 是否为黑色。

  4. 如果 $(n_x, n_y)$ 是黑色,机器人爆炸。

  5. 如果 $(n_x, n_y)$ 是白色,游戏继续进行到下一个时间步,机器人现在位于 $(n_x, n_y)$。

你的目标是使机器人在 $T$ 个时间步内爆炸。

输入格式

输入的第一行包含两个整数 $s_x$ 和 $s_y$ ($1 \le s_x, s_y \le 20$),表示机器人的初始坐标。

交互协议

交互最多进行 $T$ 轮。在每一轮 $t$(从 $t = 1$ 到 $T$)中:

  1. 你的程序必须输出一行,包含两个空格分隔的整数 $x_m$ 和 $y_m$,表示你在这一轮中选择标记为黑色的单元格的坐标。请记住刷新输出流。
  2. 交互器读取你选择的坐标 $(x_m, y_m)$。
  3. 交互器根据机器人的当前位置和所有黑色单元格的集合(包括刚刚在 $(x_m, y_m)$ 标记的单元格)来决定机器人的下一步移动 $(n_x, n_y)$。
  4. 交互器检查单元格 $(n_x, n_y)$ 是否为黑色。

  5. 如果它是黑色(机器人爆炸),交互器将输出单行 0 0 并终止。你的程序随后应当读取这些值并成功终止。

  6. 如果它是白色,交互器将输出单行,包含两个空格分隔的整数 $n_x$ 和 $n_y$,即机器人的新坐标。你的程序应当读取这些坐标,以获取机器人下一轮的当前位置。

如果机器人在你进行了 $T$ 次移动后仍未爆炸,你的程序应当终止。在这种情况下(或者如果你超过了轮数限制或进行了无效移动),你的解答将被判定为错误。

要刷新输出,你可以使用:

  • C 和 C++ 中的 fflush(stdout)(如果使用 printf)或 cout.flush()(如果使用 cout)。
  • Java 中的 System.out.flush()
  • Python 中的 stdout.flush()

注意:如果你的程序没有正确终止,可能会被判定为格式错误(Presentation Error, PE)。

样例

样例输入 1

5 5
5 4
5 3
5 2
5 1
0 0

样例输出 1

6 1
4 1
6 2
4 2
5 2

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.