QOJ.ac

QOJ

Límite de tiempo: 30 s Límite de memoria: 1024 MB Puntuación total: 25 Interactivo

#12091. 去吧,地鼠!

Estadísticas

今年早些时候,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 的内容,然后停止向你的输入流发送输出:

  1. 你的程序发送了格式错误或超出范围的值(例如 $1000001$、$-1$ 或其他非数字内容),或者发送了过多的值。
  2. 在为当前测试用例发送了 $S$ 个值后,你的程序发送了一个不在闭区间 $[-25, -2]$ 内的值。
  3. 你的程序发送了一个在闭区间 $[-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$ 零食的两个提交将看到地鼠以相同的顺序出现。

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.