QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 2048 MB Total points: 100 Interactive

#10560. Cursed Game

统计

你在仓库里发现了一个古老的盒子,并决定打开它。就在你打开盒子的那一刻,你被困入了一个与恶魔对弈的诅咒游戏。游戏共包含 333 轮,你必须赢得所有轮次才能逃脱。恶魔给了你 999 枚硬币,你可以在所有轮次中使用它们。

注意,在本题中,网格的单元格 $(r, c)$ 指的是网格中第 $r$ 行第 $c$ 列的单元格。

在每一轮开始前,恶魔会准备一张秘密纸片,它可以表示为一个 3 行 3 列的网格,行和列均从 1 到 3 编号。恶魔会秘密地在其中一个或多个单元格上打孔,而你并不知道哪些单元格有孔。随后,该轮游戏开始,恶魔会给你一个奇数 $N$ ($3 \le N \le 33$)。

在每一轮中,你可以向恶魔提出若干次询问,每次询问消耗一枚硬币。对于每次询问,你可以向恶魔提供你的纸片,它可以表示为一个 $N$ 行 $N$ 列的网格,行和列均从 1 到 $N$ 编号。每个单元格由你涂成黑色或白色。

对于你的每一次询问,恶魔会计算出一个 $N - 2$ 行 $N - 2$ 列的二进制结果网格,行和列均从 1 到 $N - 2$ 编号。结果网格中单元格 $(r, c)$ 的值填充如下:

  • 恶魔将秘密纸片叠放在你的纸片上,使得你纸片上的单元格 $(r + i - 1, c + j - 1)$ 与秘密纸片上的单元格 $(i, j)$ 对齐,其中 $1 \le i, j \le 3$。
  • 只有当秘密纸片上对应的单元格有孔时,恶魔才能看到你纸片上对应单元格的颜色。
  • 如果通过孔洞看到的黑色单元格数量为奇数,则结果网格中单元格 $(r, c)$ 的值为 1,否则为 0。

如果你得到的结果网格中所有值均为 1,则你赢得该轮游戏。否则,恶魔会将结果网格作为反馈给你,游戏继续进行。

如果你耗尽了所有硬币仍未赢得所有轮次,你将被永远困住。逃离这个诅咒游戏吧!

交互

每一轮开始时,会通过标准输入读入一个奇数 $N$ ($3 \le N \le 33$)。

随后,对于你向恶魔提出的每一次询问,你可以向标准输出输出 $N$ 行。每一行包含 $N$ 个字符。第 $r$ 行的第 $c$ 个字符表示你纸片上单元格 $(r, c)$ 的颜色。如果单元格 $(r, c)$ 涂成黑色,则字符应为 1;如果涂成白色,则为 0

恶魔会通过标准输入回复一行字符串:

  • 如果字符串为 CORRECT,则你赢得了当前轮次,下一轮(如果存在)将立即开始。
  • 如果字符串为 INCORRECT,则恶魔会通过标准输入给出接下来的 $N - 2$ 行。每一行包含 $N - 2$ 个字符,表示题目描述中所述的二进制结果网格。

恶魔在每一轮开始前准备好秘密纸片。换句话说,评测程序不是自适应的。秘密纸片上至少会有一个孔。

所有 333 轮的总询问次数不得超过 999 次。如果你超过了最大询问次数,你应该以 0 退出程序以获得 Wrong Answer 判决。如果你不退出,判决结果将是不确定的,因为你的程序正在从已关闭的流中读取数据。

请记得在每次输出后刷新输出缓冲区。在 C 语言中,可以使用 fflush(stdout)。在 C++ 中,可以使用 cout << flushcout << endl。在 Java 中,可以使用输出流的 flush() 方法,例如 System.out.flush()。在 Python 中,可以使用 sys.stdout.flush()

样例

输入 1

3
INCORRECT
0
CORRECT
5
INCORRECT
111
001
111
CORRECT

输出 1

111
000
111
111
111
111
10011
10011
00000
11010
11011
11011
11011
00100
11011
11011

说明

对于第一轮,下图展示了恶魔如何为第一次和第二次询问计算结果网格中单元格 $(1, 1)$ 的值。灰色方块代表秘密纸片,圆圈代表孔洞。在第一次询问中,通过孔洞可以看到 4 个黑色单元格,因此结果网格中单元格 $(1, 1)$ 的值为 0。在第二次询问中,可以看到 5 个黑色单元格,因此结果网格中单元格 $(1, 1)$ 的值为 1。由于结果网格中仅包含 1,第一轮结束。

对于第二轮,下图展示了恶魔如何为第一次询问计算结果网格中单元格 $(2, 1)$ 的值。由于通过孔洞可以看到 2 个黑色单元格,因此单元格 $(2, 1)$ 的值为 0。

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.