QOJ.ac

QOJ

Límite de tiempo: 5 s Límite de memoria: 1024 MB Puntuación total: 32 Interactivo

#11455. 高尔夫地鼠

Estadísticas

去年,一群讨厌的地鼠在我们的果园里安了家。我们试图通过开设一个迷你高尔夫球场来改变我们的工作,但地鼠们似乎也跟到了这里!我们再次需要弄清楚这里有多少只地鼠,但我们无法直接观察它们,因为它们既隐秘又昼伏夜出,而我们喜欢在晚上睡觉。我们只知道地鼠的数量在 $1$ 到 $M$ 之间(包含 $1$ 和 $M$)。

我们的迷你高尔夫球场以其 $18$ 个球洞上各有一个小型电子风车而闻名。第 $i$ 个风车有 $2 \le B_i \le 18$ 个叶片,叶片按顺时针方向编号为 $0$ 到 $B_i-1$。每天晚上睡觉前,我们会关闭风车并将每个风车设置为 $0$ 号叶片朝下,这对于风车在第二天正常充电非常重要。然而,我们注意到当我们醒来时,风车已经被扰动了。由于我们的迷你高尔夫球场处于无风地带,我们认为一定是那些淘气的地鼠干的!

我们知道每天晚上,所有的地鼠都会一只接一只地出现;每只地鼠独立且均匀随机地选择一个风车,并将其逆时针旋转一个叶片。例如,对于一个有 $3$ 个叶片且 $0$ 号叶片朝下的风车,第一只与它交互的地鼠会将其转动,使得 $1$ 号叶片朝下,接着下一只与该风车交互的地鼠会使朝下的叶片编号变为 $2$,然后是 $0$,再是 $1$,依此类推。

我们制定了一个计划。我们设计了风车,以便我们可以轻松更改叶片的数量(以调节球场的难度),现在我们将利用这一点!每天晚上睡觉前,我们可以在给定的限制范围内选择 $18$ 个风车中每个风车的叶片数量;我们不必在每个风车上使用相同数量的叶片,也不必每天都做出相同的选择。早上,我们将观察每个风车朝下的叶片编号。

我们有 $N$ 个晚上的时间来找出地鼠的数量 $G$。你能帮帮我们吗?

输入格式

这是一个交互式问题。请确保你已经阅读了 FAQ 中关于交互式问题的说明。

程序首先应读取一行,包含三个整数 $T$、$N$ 和 $M$,分别代表测试用例数量、每个测试用例允许的夜晚数以及地鼠的最大数量。

然后,你需要处理 $T$ 个测试用例。

在每个测试用例中,你的程序最多与裁判进行 $N+1$ 次交互。你可以进行最多 $N$ 次以下形式的交互:

  • 你的程序输出一行,包含 $18$ 个 $2$ 到 $18$ 之间的整数;其中第 $i$ 个数代表你希望第 $i$ 个风车在当晚拥有的叶片数量。
  • 裁判返回一行,包含 $18$ 个整数;其中第 $i$ 个数代表第二天早上第 $i$ 个风车朝下的叶片编号(在地鼠捣乱之后)。如果你发送了无效数据(例如超出范围的数字或格式错误的行),裁判将返回 $-1$。

每天晚上,对于每只地鼠,选择转动哪个风车是均匀(伪)随机的,并且独立于任何其他地鼠(包括其自身)在任何夜晚的任何其他选择。

在按照上述说明进行了 $0$ 到 $N$ 次交互后,你必须进行最后一次以下形式的交互:

  • 你的程序输出一个整数:你对地鼠数量 $G$ 的猜测。
  • 裁判返回一行,包含一个整数:如果你的答案正确,则返回 $1$;如果答案错误(或者你提供了格式错误的行),则返回 $-1$。

数据范围

$1 \le T \le 20$。 时间限制:每个测试集 $20$ 秒。 内存限制:$1\text{GB}$。

测试集 1(可见)

$N = 365$。 $M = 100$。

测试集 2(隐藏)

$N = 7$。 $M = 10^6$。

说明

在裁判向你的输入流发送 $-1$(因为数据无效或答案错误)后,它将不会发送任何其他输出。如果你的程序在收到 $-1$ 后继续等待裁判,程序将会超时,导致“超出时间限制”(Time Limit Exceeded)错误。请注意,你有责任让你的程序及时退出,以便接收到“答案错误”(Wrong Answer)判决,而不是“超出时间限制”错误。通常情况下,如果超过内存限制或程序出现运行时错误,你将收到相应的判决。

样例

此交互对应测试集 1。假设裁判决定地鼠数量为 $10$。

t, n, m = readline_int_list() // 读取 20 到 t, 365 到 n, 100 到 m
// 选择第 1 天的叶片数量
printline 2 2 2 2 18 3 3 3 3 3 3 4 4 4 4 5 2 2 to stdout
flush stdout
// 读取 0 0 0 0 0 0 1 2 1 0 1 2 0 0 0 0 1 0 到 res
res = readline_int_list()
// 选择第 2 天的叶片数量
printline 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 to stdout
flush stdout
// 读取 0 1 1 2 0 0 1 0 0 0 0 0 0 1 0 0 0 0 到 res
res = readline_int_list()
printline 8 to stdout // 我们做出了错误的猜测,尽管我们本可以
flush stdout // 再调查多达 363 个晚上
verdict = readline_int() // 读取 -1 到 verdict(裁判判定我们的
 // 解决方案不正确)
exit // 退出以避免模糊的 TLE 错误

请注意,即使猜测与我们从裁判那里收到的信息一致,我们仍然是错误的,因为我们没有找到正确的值。

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.