#P13068. [GCJ 2020 #3] Pen Testing

    ID: 12911 远端评测题 90000ms 1024MiB 尝试: 0 已通过: 0 难度: 8 上传者: 标签>2020交互题Special Judge概率论Google Code Jam

[GCJ 2020 #3] Pen Testing

Description

你有 NN 支圆珠笔。已知每支笔的墨水单位数都是 00N1N-1 之间互不相同的整数,但这些笔是随机顺序给你的,因此你不知道哪支笔对应多少墨水。

你即将前往南极(那里没有笔),而你的行李只能装两支笔。你知道需要写很多重要的明信片,因此选择的两支笔的墨水总量必须至少为 NN 单位。

获取笔信息的唯一方法是选择一支笔尝试写字。尝试结果有两种:成功(该笔墨水减少 1 单位,可能用完)或失败(该笔已无墨水)。你可以重复测试同一支笔或不同笔。

最终,你必须选择两支笔带去南极。若这两支笔剩余墨水的总量不少于 NN 单位,则视为成功。

本题包含 TT 个测试用例,你需要在至少 CC 个用例中成功。注意本题所有测试集都是可见的。

交互协议

这是一个交互题。

初始时,你的程序应读取一行包含三个整数 T\mathbf{T}N\mathbf{N}C\mathbf{C}:测试用例数量、笔的数量和需要成功的最少用例数。(注意 N\mathbf{N} 在所有测试集中相同,详见数据范围部分。)

然后,你的程序需要同时处理所有 T\mathbf{T} 个测试用例(这是为了减少交互次数)。交互以轮次进行。

每轮开始时,你的程序需输出一行 T\mathbf{T} 个整数:第 ii 个整数表示在第 ii 个测试用例中要测试的笔编号(1 到 N\mathbf{N}),若该轮不测试则输出 0。

注意:如果在每个整数后立即刷新输出缓冲区(而非整行输出后刷新),可能导致超时错误。

评测机将返回一行 T\mathbf{T} 个整数:第 ii 个整数表示该轮第 ii 个测试用例的耗墨量。1 表示测试成功(耗墨 1 单位),0 表示测试失败(笔已无墨)或未测试。

最多可进行 N×(N+1)/2\mathbf{N} \times (\mathbf{N}+1)/2 轮交互(足以耗尽所有墨水)。

当准备提交答案时,输出一行包含 T\mathbf{T} 个 0。此行不计入交互轮次限制,评测机不会回复。

接着输出一行 2×T2 \times \mathbf{T} 个整数:第 (2i1)(2i-1) 和第 2i2i 个整数表示第 ii 个测试用例选择的两支笔编号。输出后程序应立即终止。

若评测机收到意外输出,将返回 -1 并终止交互。程序需及时退出以避免超时错误。

注意:每次提交时,笔的初始顺序都是独立随机生成的。

Input Format

参见交互协议。

Output Format

参见交互协议。

2 5 1

1 0

0 1

0 1

4 5

4 3

0 2

0 0
3 4 3 4

Hint

样例解释

交互过程解析:

// 读取 T=2, N=5, C=1
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
// 返回1 0(笔4有墨,笔5无墨)
a1, a2 = readline_int_list()
// 第二轮:测试用例1用笔4,测试用例2用笔3
printline 4 3
// 返回0 1(笔4已无墨,笔3有墨)
a1, a2 = readline_int_list()
// 第三轮:仅测试用例2用笔2
printline 0 2
// 返回0 1
a1, a2 = readline_int_list()
// 准备提交答案
printline 0 0
// 选择笔3和笔4
printline 3 4 3 4
// 测试用例1:4+0<5(失败)
// 测试用例2:1+4≥5(成功)
// 成功数1≥C,通过
exit

可使用本地测试工具进行调试。建议配合交互运行器使用。注意测试工具与真实评测系统可能存在差异。

数据范围

  • N=15\mathbf{N} = 15

测试集 1(6 分,可见判定)

  • T=20000\mathbf{T} = 20000
  • C=10900\mathbf{C} = 10900C=0.545×T\mathbf{C} = 0.545 \times \mathbf{T}

测试集 2(11 分,可见判定)

  • T=20000\mathbf{T} = 20000
  • C=12000\mathbf{C} = 12000C=0.6×T\mathbf{C} = 0.6 \times \mathbf{T}

测试集 3(15 分,可见判定)

  • T=100000\mathbf{T} = 100000
  • C=63600\mathbf{C} = 63600C=0.636×T\mathbf{C} = 0.636 \times \mathbf{T}

翻译由 DeepSeek V3 完成