P15882 [ICPC 2026 NAC] Heist of the Century

题目描述

在精心策划了盗窃蒙特卡洛伯爵王冠宝石的最复杂计划之后,你遇到了最后的障碍:一个上锁的保险柜。不过,你为此训练已久,并磨练了开锁技巧。 保险柜有 $N$ 个拨盘,每个拨盘可以设置为 $1$ 到 $2N$ 之间的任意整数值。蒙特卡洛伯爵为保险柜预设了每个拨盘的正确秘密值。要尝试打开保险柜,你可以为每个拨盘设置一个值,然后转动保险柜的门把手。如果每个拨盘都设置到了正确的秘密值,你会感到没有阻力,门会立即打开。 当然,通过随机猜测所有正确的秘密值来打开保险柜是极不可能成功的。然而,作为一位开锁专家,即使猜测错误,你在尝试开门时也会感受到一定的阻力,并可以利用这些信息来帮助推断正确的秘密值。如果一个拨盘的秘密值是 $h$,而你在尝试开门时将其设置为 $d$,该拨盘会对转动门把手产生 $|h-d|$ 的阻力。你能感受到所有拨盘中的 **最大** 阻力。(注意,如果该值为 $0$,则说明你已成功打开保险柜,完成了盗窃!) 不幸的是,安保团队已经意识到你的存在,并且正在向你靠近。你每秒只能尝试开锁一次,但他们距离你还有 $4N$ 秒!你能在被抓住之前完成盗窃吗? ### 交互方式 本题为交互题。 交互开始时,从标准输入读取一个整数 $N$ $(1 \leq N \leq 500)$,表示保险柜上拨盘的数量。 你的程序最多可以进行 $4N$ 次尝试打开保险柜,每次尝试你需要为每个拨盘指定一个值。每次尝试后,你将会被告知从门把手上感受到的阻力。 要进行一次尝试,请输出一行,包含 $N$ 个空格分隔的整数 $d_1, d_2, \ldots, d_N$ $(1 \leq d_i \leq 2N)$,表示你为每个拨盘设定的值。然后从标准输入读取一个整数,表示你从门把手上感受到的阻力,即 $\max_i |h_i - d_i|$,其中 $h_i$ 是第 $i$ 个拨盘的秘密值(对你而言未知)。如果阻力为 $0$,则说明你已打开保险柜,程序应立即终止。否则,若还有剩余尝试次数,你可以继续尝试。 如果你用完了所有尝试次数,程序应干净退出(但你会因未能在规定时间内打开保险柜逃脱守卫而被判为错误)。 每个拨盘的秘密值由蒙特卡洛伯爵在盗窃前预先设定,不会随你的破解尝试而改变。

输入格式

输出格式

说明/提示

### 注意 **在每行输出后请勿忘记刷新输出缓冲区**,并在交互结束后干净退出。同时,请务必严格按照上述交互协议的要求输出对应行上的信息:例如,如果协议要求你在单行输出空格分隔的整数列表,评测器 **不会** 接受每个整数单独占一行的情况。 如果评测器接收到无效或意外的输入,它将输出 $-1$ 并立即退出。你的程序必须检测到此错误报告并干净退出,以便得到 Wrong Answer 的评测结果。如果你的程序阻塞等待与评测器的进一步交互,或试图将 $-1$ 解释为阻力值,你可能会收到其他被拒的评测结果(如 Time Limit Exceeded 或 Runtime Error)而不是 Wrong Answer。 已为你提供用于本地测试的命令行工具。该工具顶部有注释说明其使用方法。 翻译由 DeepSeek V3.2 完成