CF1503B 3-Coloring

题目描述

这是一个交互题。 Alice 和 Bob 正在玩一个游戏。有一个 $n \times n$ 的网格,初始时为空。我们用 $(i, j)$ 表示第 $i$ 行第 $j$ 列的格子,$1 \le i, j \le n$。有无限多的三种颜色的棋子,分别标记为 $1$、$2$ 和 $3$。 游戏按如下方式轮流进行。每一轮开始时,Alice 说出三种颜色中的一种,记为 $a$。然后,Bob 选择一种颜色 $b \ne a$,选择一个空格子,并在该格子上放置一个颜色为 $b$ 的棋子。 如果存在两个相邻的格子上放有相同颜色的棋子,则称为发生冲突。两个格子相邻当且仅当它们有公共边。 如果在任意时刻发生冲突,Alice 获胜。否则,如果完成了 $n^2$ 轮(即网格被填满)且没有发生冲突,则 Bob 获胜。 我们已经证明 Bob 有必胜策略。请作为 Bob 玩这个游戏并获胜。 交互器是自适应的。也就是说,Alice 的颜色选择可以依赖于 Bob 之前的操作。

输入格式

输出格式

交互开始时,先读入一个整数 $n$($2 \le n \le 100$)——网格的大小。 每一轮游戏如下进行。你应当先读入一个整数 $a$($1 \le a \le 3$)——Alice 选择的颜色。 然后你必须输出三个整数 $b, i, j$($1 \le b \le 3, b \ne a, 1 \le i, j \le n$),表示 Bob 在 $(i, j)$ 位置放置一个颜色为 $b$ 的棋子。$(i, j)$ 位置必须是之前未被放置过棋子的空格。 如果你的操作无效或导致 Bob 输掉游戏,交互将被终止,并判为 Wrong Answer。 完成 $n^2$ 轮后,请立即退出以避免收到意外的判题结果。 每次输出后不要忘记换行并刷新输出缓冲区,否则会收到 Idleness limit exceeded 的判罚。具体做法如下: - C++:fflush(stdout) 或 cout.flush() - Java:System.out.flush() - Pascal:flush(output) - Python:stdout.flush() - 其它语言请查阅相关文档。 Hack 格式 Hack 时使用如下格式。 第一行包含一个整数 $n$($2 \le n \le 100$)。 第二行包含 $n^2$ 个整数 $a_1, \ldots, a_{n^2}$($1 \le a_i \le 3$),其中 $a_i$ 表示第 $i$ 轮 Alice 选择的颜色。 交互器可能会偏离你 hack 时提供的颜色序列,但只有在必须让 Bob 输掉时才会这样做。

说明/提示

下图展示了样例的最终网格。Bob 获胜,因为没有两个相邻格子放有相同颜色的棋子。 $$ \begin{matrix} 2 & 3 \\ 3 & 1 \end{matrix} $$ 样例仅用于演示输入输出格式,不保证是 Bob 的最优策略,也不保证交互器的真实行为。 由 ChatGPT 4.1 翻译