539 人解决,652 人已尝试。
589 份提交通过,共有 2643 份提交。
2.0 EMB 奖励。
单点时限: 1.0 sec
内存限制: 256 MB
这是一道交互题。
Cuber QQ 正在做 CuberOJ 上的一道难题。这是一道有着 $n$ 组评测数据的传统算法竞赛题,每组测试数据的第一行都是一个整数,表示这组测试数据的编号:第一组数据的第一行是一个 $1$,第二组数据的第一行是一个 $2$,以此类推。每组测试数据的答案都是 $0$ 或 $1$。
CuberOJ 的评测机制与 ICPC 竞赛类似。它会按照编号逐一使用评测数据来测试提交的程序。如果选手的程序通过了一组评测数据,那么评测机会继续评测下一组数据;而如果选手的程序输出了错误的答案,那么评测机会反馈WA
并且不再进行后续的评测。如果在使用某组数据进行评测时,程序发生了运行错误(比如除零、数组越界导致的段错误),那么评测机会反馈RE
并同样不再进行后续评测。如果程序通过了所有的测试数据,那么评测机会反馈AC
。
CuberOJ 与 EOJ 不同,它并不会告诉 Cuber QQ 具体错在第几个测试点,而只会反馈一个最终结果——AC
、WA
或者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
函数如下:
fflush(stdout);
System.out.flush();
flush(output);
sys.stdout.flush()
5 RE WA AC
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
。此时选手程序需要自行终止(否则会超时)。
539 人解决,652 人已尝试。
589 份提交通过,共有 2643 份提交。
2.0 EMB 奖励。
创建: 1 年,7 月前.
修改: 1 年,7 月前.
最后提交: 1 月,2 周前.
来源: N/A