#P15882. [ICPC 2026 NAC] Heist of the Century

    ID: 15805 远端评测题 4000ms 2048MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>交互题Special JudgeICPC2026NAC

[ICPC 2026 NAC] Heist of the Century

说明

在精心策划了盗窃蒙特卡洛伯爵王冠宝石的最复杂计划之后,你遇到了最后的障碍:一个上锁的保险柜。不过,你为此训练已久,并磨练了开锁技巧。

保险柜有 NN 个拨盘,每个拨盘可以设置为 112N2N 之间的任意整数值。蒙特卡洛伯爵为保险柜预设了每个拨盘的正确秘密值。要尝试打开保险柜,你可以为每个拨盘设置一个值,然后转动保险柜的门把手。如果每个拨盘都设置到了正确的秘密值,你会感到没有阻力,门会立即打开。

当然,通过随机猜测所有正确的秘密值来打开保险柜是极不可能成功的。然而,作为一位开锁专家,即使猜测错误,你在尝试开门时也会感受到一定的阻力,并可以利用这些信息来帮助推断正确的秘密值。如果一个拨盘的秘密值是 hh,而你在尝试开门时将其设置为 dd,该拨盘会对转动门把手产生 hd|h-d| 的阻力。你能感受到所有拨盘中的 最大 阻力。(注意,如果该值为 00,则说明你已成功打开保险柜,完成了盗窃!)

不幸的是,安保团队已经意识到你的存在,并且正在向你靠近。你每秒只能尝试开锁一次,但他们距离你还有 4N4N 秒!你能在被抓住之前完成盗窃吗?

交互方式

本题为交互题。

交互开始时,从标准输入读取一个整数 NN (1N500)(1 \leq N \leq 500),表示保险柜上拨盘的数量。

你的程序最多可以进行 4N4N 次尝试打开保险柜,每次尝试你需要为每个拨盘指定一个值。每次尝试后,你将会被告知从门把手上感受到的阻力。

要进行一次尝试,请输出一行,包含 NN 个空格分隔的整数 d1,d2,,dNd_1, d_2, \ldots, d_N (1di2N)(1 \leq d_i \leq 2N),表示你为每个拨盘设定的值。然后从标准输入读取一个整数,表示你从门把手上感受到的阻力,即 maxihidi\max_i |h_i - d_i|,其中 hih_i 是第 ii 个拨盘的秘密值(对你而言未知)。如果阻力为 00,则说明你已打开保险柜,程序应立即终止。否则,若还有剩余尝试次数,你可以继续尝试。

如果你用完了所有尝试次数,程序应干净退出(但你会因未能在规定时间内打开保险柜逃脱守卫而被判为错误)。

每个拨盘的秘密值由蒙特卡洛伯爵在盗窃前预先设定,不会随你的破解尝试而改变。

3

5

1

0

1 1 1

3 4 5

4 5 6

提示

注意

在每行输出后请勿忘记刷新输出缓冲区,并在交互结束后干净退出。同时,请务必严格按照上述交互协议的要求输出对应行上的信息:例如,如果协议要求你在单行输出空格分隔的整数列表,评测器 不会 接受每个整数单独占一行的情况。

如果评测器接收到无效或意外的输入,它将输出 1-1 并立即退出。你的程序必须检测到此错误报告并干净退出,以便得到 Wrong Answer 的评测结果。如果你的程序阻塞等待与评测器的进一步交互,或试图将 1-1 解释为阻力值,你可能会收到其他被拒的评测结果(如 Time Limit Exceeded 或 Runtime Error)而不是 Wrong Answer。

已为你提供用于本地测试的命令行工具。该工具顶部有注释说明其使用方法。

翻译由 DeepSeek V3.2 完成