你正在一个 $n \times n$ 的网格棋盘上与 AI 进行博弈。你有两枚棋子,AI 有一枚棋子,每枚棋子都放置在网格的某个单元格中。你的目标是“抓住”AI 的棋子,即在你的某一回合结束后,你至少有一枚棋子(或两枚)与 AI 的棋子位于同一个单元格中。当这种情况发生时,你获胜且游戏结束。如果你在 600 回合内没有获胜,则判定为失败。
每一回合,你每枚棋子最多有五种移动选择:你可以将棋子向上、下、左、右移动到相邻的单元格(如果存在的话),或者让棋子保持在当前单元格不动。AI 在它的每一回合中也有相同的移动选择。当然,你可以完全独立地移动你的两枚棋子,甚至可以让它们占据同一个单元格。
你的目标很简单:赢得游戏!你可以确信这总是可能的。
输入格式
在你的第一回合之前,你的程序将接收:
- 一行包含一个整数 $n$ ($3 \le n \le 100$),表示网格的大小。
- 一行包含四个整数 $x_1, y_1, x_2, y_2$ ($1 \le x_1, y_1, x_2, y_2 \le n$),表示你两枚棋子的初始位置。
- 一行包含两个整数 $x, y$ ($1 \le x, y \le n$),表示 AI 棋子的初始位置。
你可以确信你的棋子初始时不会与 AI 的棋子位于同一个单元格(但它们可能位于同一个单元格)。
交互
你的提交程序将与一个称为 grader 的特殊程序进行交互。这意味着你的程序的输出会被发送给 grader,而 grader 的输出会被发送到你程序的标准输入。这种交互必须遵循特定的协议:
你的程序与 grader 交替进行回合,由你先手。你的回合由一行包含四个整数 $x_1, y_1, x_2, y_2$ 的输出组成,用于指定你回合结束后棋子的位置(顺序与初始输入相同)。同样地,grader 将发送包含两个整数 $x, y$ 的行,以指示 AI 的回合。你可以确信 grader 只会发送合法的移动,且 AI 永远不会选择将其棋子放置在被你的一枚或两枚棋子占据的单元格中。你的程序最多可以进行 600 个回合。
在你的每一回合之后,你应该刷新标准输出,以确保请求被发送给 grader。例如,在 C++ 中可以使用 fflush(stdout),在 Java 中使用 System.out.flush(),在 Python 中使用 sys.stdout.flush()。
在你向 grader 发送一个成功抓住 AI 棋子的合法回合后,游戏结束。你的程序应随后正常终止,退出代码为 0。为了方便起见,grader 会发送一行包含 0 0 的内容来表示游戏结束,你的程序可以选择读取或不读取该行。
如果你的提交程序遵循上述规则和协议并赢得了游戏,它将被接受。如果它发送了任何非法移动,将被判定为“Wrong Answer”。
为了方便起见,我们提供了一个测试工具,让你能够与一个简单的 AI 对手版本进行交互。它包含在你可以从 DOMjudge 问题概览页面下载的带有样例数据的 ZIP 压缩包中。
样例
样例 1
3 1 1 3 1 2 3
1 2 3 2 3 3 1 2 3 3 0 0