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 翻译