5040. 命题人的疏忽

单点时限: 1.0 sec

内存限制: 256 MB

这是一道交互题。

Cuber QQ 正在做 CuberOJ 上的一道难题。这是一道有着 $n$ 组评测数据的传统算法竞赛题,每组测试数据的第一行都是一个整数,表示这组测试数据的编号:第一组数据的第一行是一个 $1$,第二组数据的第一行是一个 $2$,以此类推。每组测试数据的答案都是 $0$ 或 $1$。

CuberOJ 的评测机制与 ICPC 竞赛类似。它会按照编号逐一使用评测数据来测试提交的程序。如果选手的程序通过了一组评测数据,那么评测机会继续评测下一组数据;而如果选手的程序输出了错误的答案,那么评测机会反馈WA并且不再进行后续的评测。如果在使用某组数据进行评测时,程序发生了运行错误(比如除零、数组越界导致的段错误),那么评测机会反馈RE并同样不再进行后续评测。如果程序通过了所有的测试数据,那么评测机会反馈AC

CuberOJ 与 EOJ 不同,它并不会告诉 Cuber QQ 具体错在第几个测试点,而只会反馈一个最终结果——ACWA或者RE。Cuber QQ 觉得,如果他能够知道他的程序在第几个测试点WA了,那么他就能够很轻松地试出所有测试数据的答案。

在 Quber CC 的指点下,Cuber QQ 发现,如果他在某些测试数据上故意构造一句导致RE的语句,就可以间接地推断出一些信息。所以即便 CuberOJ 不告诉他具体发生错误的测试点编号,他也有方法试出所有正确的答案。而现在,帮助 Cuber QQ 试出正确答案的重任落到了你的头上。你可以进行多次尝试,每次尝试你可以用一行 $n$ 个整数来表示你的程序的构造方式:$0$ 表示让你的程序输出 $0$,$1$ 表示让你的程序输出 $1$,而 $-1$ 则表示你故意构造一个RE。比如,如果你想构造以下这个程序,请输出0 1 -1

input(n);
if (n == 1) print(0);
if (n == 2) print(1);
if (n == 3) n = n / 0;

在你的每次尝试后,交互器会告诉你这个程序的运行结果,AC或者WA或者RE。如果你得到了一个AC,请立即结束你的程序,并且你会通过本题的一个测试点。

请注意,你最多有 $n+1$ 次尝试机会。如果你没能在这 $n+1$ 次尝试中输出完全正确的答案,那么你无法通过此题。

输入格式

在交互开始前,你需要先读入一个整数 $n$ ($1 \le n \le 100$),表示测试数据的组数。

然后你可以开始交互。请你在一行中输出 $n$ 个整数,每个整数都是 $0,1,-1$ 之一,分别表示你想对对应的一组测试数据构造答案 0、构造答案 1、或构造一句会导致RE的语句。

对于你的每一次尝试,交互器都会在单独的一行中输出运行结果:AC或者WA或者RE,表示你构造的程序的运行结果。因此,当你的程序输出结束后,你都应该读入交互器返回的信息。如果你读到了AC,请立即终止你的程序,否则可能会被判定为超时。

输出格式

注意,你需要在每输出一行之后执行 flush 操作,否则你提交的程序有可能会被判定为Idleness limit exceeded

适用于各种语言的flush函数如下:

  • 对于 C++ 语言,你可以使用fflush(stdout);
  • 对于 Java 语言,你可以使用System.out.flush();
  • 对于 Pascal 语言,你可以使用flush(output);
  • 对于 Python 语言,你可以使用sys.stdout.flush()

样例

Input
5
RE
WA
AC
Output
1 0 1 1 -1
1 0 1 1 1
1 0 1 1 0

提示

样例解释:

假设 5 组测试数据的正确答案分别是1 0 1 1 0

首先,交互器向选手程序输入5,即数据的组数。选手程序猜测前 4 组数据是1 0 1 1,并在第 5 组构造一个RE,因此输出1 0 1 1 -1。前 4 组答案正确,第 5 组RE,因此交互器向选手程序输入结果RE

接着,选手程序猜测前5组数据是1 0 1 1 1,输出1 0 1 1 1,由于前4组答案正确、第5组答案错误,因此交互器向选手程序输入WA

最后,选手程序输出1 0 1 1 0。答案全部正确,交互器向选手程序输入AC。此时选手程序需要自行终止(否则会超时)。

537 人解决,649 人已尝试。

585 份提交通过,共有 2633 份提交。

2.0 EMB 奖励。

创建: 1 年,1 月前.

修改: 1 年,1 月前.

最后提交: 3 周,2 天前.

来源: N/A

题目标签