你有 $N$ 支圆珠笔。你知道每支笔的墨水单位数都是 $0$ 到 $N-1$ 之间的一个不同整数,但这些笔是随机给你的,因此你不知道哪支笔对应哪个数值。
你即将前往南极(那里没有笔),你的行李箱只能装下两支笔,但你知道你需要写很多重要的明信片。具体来说,你选择的两支笔的墨水总量必须至少为 $N$ 个单位。
获取笔的信息的唯一方法是选择一支笔并尝试用它写字。你要么成功,此时该笔的墨水会减少一个单位(现在可能为空),要么失败,这意味着该笔已经没有墨水了。你可以多次重复此操作,使用同一支笔或不同的笔。
最终,你必须选择两支笔带去旅行,如果这两支笔中剩余的墨水总量至少为 $N$ 个单位,则视为成功。
你将获得 $T$ 个测试用例,你必须在其中至少 $C$ 个测试用例中取得成功。注意,本题中的所有测试集都是可见的。
输入格式
这是一个交互式问题。请确保你已阅读 FAQ 中关于交互式问题的相关信息。
首先,你的程序应读取一行,包含三个整数 $T$、$N$ 和 $C$:测试用例的数量、笔的数量以及你必须成功的最小测试用例数。(注意,$N$ 的值对于所有测试集都是相同的,提供该值仅为了方便;详见数据范围部分。)
然后,你的程序需要同时处理所有 $T$ 个测试用例(这样做是为了减少你的解决方案与评测程序之间的往返次数)。交互按轮次进行。
在每一轮开始时,你的程序必须打印一行,包含 $T$ 个整数:第 $i$ 个整数是你想要在第 $i$ 个测试用例中尝试书写的笔的编号,如果你不想在这一轮中对该测试用例进行书写,则输出 $0$。笔的编号从 $1$ 到 $N$。
请注意,在打印完所有 $T$ 个整数后才刷新输出缓冲区,而不是在打印每个整数后都刷新,因为刷新本身消耗的时间可能会导致超时(Time Limit Exceeded)。
评测程序会返回一行,包含 $T$ 个整数:第 $i$ 个整数是该轮中第 $i$ 个测试用例消耗的墨水量。如果第 $i$ 个测试用例中的书写成功,则该值为 $1$。否则,该值为 $0$,这可能意味着你尝试在第 $i$ 个测试用例中书写但所选的笔已无墨水,或者你根本没有在第 $i$ 个测试用例中尝试书写。
你最多可以参与 $N \times (N+1)/2$ 轮。注意,这足以确定所有笔是否都已耗尽墨水。
当你的程序准备好提交所有测试用例的答案时,必须打印一行包含 $T$ 个 $0$。这一行不计入轮数限制,评测程序也不会发送响应。
然后,你的程序必须打印另一行,包含 $2 \times T$ 个整数:该行中第 $(2 \times i - 1)$ 个和第 $(2 \times i)$ 个整数是你为第 $i$ 个测试用例选择带去南极的两支笔的编号。评测程序不会发送响应,之后你的程序必须无错误地终止。
如果评测程序在任何时刻收到来自你程序的意外输出,它将打印单个数字 $-1$ 且不再输出任何内容。如果你的程序在收到 $-1$ 后继续等待评测程序,你的程序将会超时,导致超时错误。请注意,你有责任让你的程序及时退出以接收“答案错误”(Wrong Answer)判决,而不是超时错误。通常情况下,如果超过内存限制或程序出现运行时错误,你将收到相应的判决。
你可以假设笔是随机分配给你的。这些顺序是针对每个测试用例和每次提交独立且均匀随机选择的。因此,即使你提交完全相同的代码两次,评测程序也会使用不同的随机顺序。
数据范围
时间限制:每个测试集 90 秒。 内存限制:1GB。 $N = 15$。
测试集 1(可见判决) $T = 20000$。 $C = 10900$ ($C=0.545 \times T$)。
测试集 2(可见判决) $T = 20000$。 $C = 12000$ ($C=0.6 \times T$)。
测试集 3(可见判决) $T = 100000$。 $C = 63600$ ($C=0.636 \times T$)。
样例
样例输入 1
2 5 1 1 0 0 1 0 1
样例输出 1
4 5 4 3 0 2 0 0 3 4 3 4
说明
以下是上述交互的解释:
// 读取 2 到 t,5 到 n,1 到 c。 t, n, c = readline_int_list() // 评测程序秘密选择了每支笔的墨水单位数: // 测试用例 1: 2 0 4 1 3 // 测试用例 2: 1 3 2 4 0 // 我们在测试用例 1 中使用第 4 支笔书写,在测试用例 2 中使用第 5 支笔书写。 printline 4 5 to stdout flush stdout // 读取 1 0,因为测试用例 1 中的第 4 支笔还有墨水, // 但测试用例 2 中的第 5 支笔没有了。 a1, a2 = readline_int_list() // 我们再次在测试用例 1 中使用第 4 支笔书写,在测试用例 2 中使用第 3 支笔书写。 printline 4 3 to stdout flush stdout // 读取 0 1。 a1, a2 = readline_int_list() // 这次我们只在测试用例 2 中使用第 2 支笔书写。 printline 0 2 to stdout flush stdout // 读取 0 1。 a1, a2 = readline_int_list() // 我们决定准备好回答了。 printline 0 0 to stdout flush stdout // 我们在两个测试用例中都带上第 3 支和第 4 支笔去南极。 printline 3 4 3 4 to stdout flush stdout // 在测试用例 1 中,第 3 支和第 4 支笔的剩余墨水量分别为 4 和 0,且 4+0<5, // 所以我们没有成功。 // 在测试用例 2 中,第 3 支和第 4 支笔的剩余墨水量分别为 1 和 4,且 1+4≥5, // 所以我们成功了。 // 我们在 2 个测试用例中成功了 1 个,因为 c=1,这已经足够了。 exit