#P13068. [GCJ 2020 #3] Pen Testing
[GCJ 2020 #3] Pen Testing
Description
你有 支圆珠笔。已知每支笔的墨水单位数都是 到 之间互不相同的整数,但这些笔是随机顺序给你的,因此你不知道哪支笔对应多少墨水。
你即将前往南极(那里没有笔),而你的行李只能装两支笔。你知道需要写很多重要的明信片,因此选择的两支笔的墨水总量必须至少为 单位。
获取笔信息的唯一方法是选择一支笔尝试写字。尝试结果有两种:成功(该笔墨水减少 1 单位,可能用完)或失败(该笔已无墨水)。你可以重复测试同一支笔或不同笔。
最终,你必须选择两支笔带去南极。若这两支笔剩余墨水的总量不少于 单位,则视为成功。
本题包含 个测试用例,你需要在至少 个用例中成功。注意本题所有测试集都是可见的。
交互协议
这是一个交互题。
初始时,你的程序应读取一行包含三个整数 、 和 :测试用例数量、笔的数量和需要成功的最少用例数。(注意 在所有测试集中相同,详见数据范围部分。)
然后,你的程序需要同时处理所有 个测试用例(这是为了减少交互次数)。交互以轮次进行。
每轮开始时,你的程序需输出一行 个整数:第 个整数表示在第 个测试用例中要测试的笔编号(1 到 ),若该轮不测试则输出 0。
注意:如果在每个整数后立即刷新输出缓冲区(而非整行输出后刷新),可能导致超时错误。
评测机将返回一行 个整数:第 个整数表示该轮第 个测试用例的耗墨量。1 表示测试成功(耗墨 1 单位),0 表示测试失败(笔已无墨)或未测试。
最多可进行 轮交互(足以耗尽所有墨水)。
当准备提交答案时,输出一行包含 个 0。此行不计入交互轮次限制,评测机不会回复。
接着输出一行 个整数:第 和第 个整数表示第 个测试用例选择的两支笔编号。输出后程序应立即终止。
若评测机收到意外输出,将返回 -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
可使用本地测试工具进行调试。建议配合交互运行器使用。注意测试工具与真实评测系统可能存在差异。
数据范围
测试集 1(6 分,可见判定)
- ()
测试集 2(11 分,可见判定)
- ()
测试集 3(15 分,可见判定)
- ()
翻译由 DeepSeek V3 完成
京公网安备 11011102002149号