今年早些时候,Code Jam 团队在勤劳的地鼠的帮助下种植了一个果园。它一定告诉了其他地鼠,因为现在果园里生活着 2 到 25 只地鼠。但很难确定到底有多少只,因为这些地鼠只在晚上才从地下隧道出来觅食,而我们在辛苦劳作了一天后太累了,无法熬夜观察它们。不过,我们确实知道每天可以制作一个“地鼠零食”,我们可以每天晚上把它放在外面,看看它是否被吃掉。我们认为可以利用这些信息来确定地鼠的数量。
我们所了解的地鼠进食方式如下:$N$ 只地鼠在某一天聚会,决定它们在接下来的 $N$ 个夜晚中依次出现的顺序。然后,在接下来的 $N$ 个夜晚中的第 $i$ 个夜晚,顺序中的第 $i$ 只地鼠出现并寻找地鼠零食。每只地鼠都有其特定的口味等级(从不改变),只有当零食的质量等级至少与该地鼠的口味等级一样高时,它才会吃掉零食。在顺序中的第 $N$ 只地鼠出现后的第二天,地鼠们会选择一个新的顺序,过程继续进行。请注意,即使地鼠选择不吃它找到的零食,在下一次议会选择的顺序中轮到它之前,它也不会再次出现。
我们必须每天制作一个全新的地鼠零食;即使零食没有被吃掉,它也会变质,不能在第二天重复使用。每天早上,我们都会得知前一天晚上的零食是否被吃掉。
今天,我们知道地鼠们正在开会决定它们的下一个顺序,所以今晚将标志着该顺序的开始。我们愿意投入大量时间进行这项调查——多达 $10^5$ 个夜晚。使用 $S$ 个或更少的零食,你能帮我们算出有多少只地鼠吗?
输入格式
这是一个交互式问题,这意味着输入和输出的概念与标准 Code Jam 问题不同。你将与一个单独的进程进行交互,该进程既为你提供信息,也评估你的响应。所有信息都通过标准输入进入你的程序;你需要传达的任何内容都应通过标准输出发送。请记住,许多编程语言默认会缓冲输出,因此请确保在阻塞等待响应之前,你的输出确实已发送(例如,通过刷新缓冲区)。
最初,你的程序应读取包含单个整数 $T$ 的单行,表示测试用例的数量。然后,你需要处理 $T$ 个测试用例。对于每个测试用例,你的程序将首先读取一行,包含一个整数 $S$:你可以使用的最大零食数量。然后,你的程序将与我们的评测机进行最多 $S + 1$ 次交换,其中最后一次交换必须是对答案的猜测。
对于第 $i$ 次交换,你的程序需要使用标准输出发送一行,包含一个整数 $Q_i$。
- 如果 $Q_i$ 在闭区间 $[1, 10^6]$ 内,则表示你将放置一个质量等级为 $Q_i$ 的地鼠零食。作为响应,评测机将打印一行,包含一个整数:如果地鼠吃了零食,则为 1;如果没吃,则为 0。该行将打印到你的输入流中,如上所述,你的程序必须通过标准输入读取它。然后,你可以开始下一次交换。
- 如果 $Q_i$ 在闭区间 $[-25, -2]$ 内,则表示你对该测试用例的回答是共有 $-Q_i$ 只地鼠。如果你的回答正确,评测机将继续处理下一个测试用例(如果有的话)。
如果发生以下任何情况,评测机将打印一行包含整数 -1 的内容,然后停止向你的输入流发送输出:
- 你的程序发送了格式错误或超出范围的值(例如 $1000001$、$-1$ 或其他非数字内容),或者发送了过多的值。
- 在为当前测试用例发送了 $S$ 个值后,你的程序发送了一个不在闭区间 $[-25, -2]$ 内的值。
- 你的程序发送了一个在闭区间 $[-25, -2]$ 内但不是正确答案的值。请注意,这意味着你只有一次机会正确回答一个测试用例。
数据范围
$1 \le T \le 10$。 时间限制:每个测试集 90 秒。 内存限制:1GB。 地鼠数量在 2 到 25 之间(含)。每只地鼠的口味等级在 1 到 $10^6$ 之间(含)。$S = 10^5$。
子任务
测试集 1(可见) 没有两只地鼠具有相同的口味等级。 地鼠每晚出现的顺序是从所有可能的顺序中均匀随机选择的,并且独立于所有其他顺序。
测试集 2(隐藏) 集合 $\{x : \text{输入中恰好有 } x \ge 1 \text{ 只地鼠共享一个口味等级}\}$ 的最大公约数(GCD)为 1。 地鼠出现的顺序选择独立于所提供的零食。
对于每个测试用例,口味等级的多重集和随机数生成的种子由出题人在比赛前预先生成,对于任何参赛者和任何提交都是相同的。这意味着对于测试用例 $i$,提供相同数量 $s_i$ 零食的两个提交将看到地鼠以相同的顺序出现。