P13110 [GCJ 2019 #1B] Draupnir

题目描述

奥丁拥有一些能够自我复制的魔法戒指。每个“X 天戒指”会在其诞生后的每隔 $X$ 天生产一个同样的 X 天戒指。这些戒指共有六种类型:1 天、2 天、……,一直到 6 天。 例如,一个在第 0 天诞生的 3 天戒指,在第 3 天才会产生另一个 3 天戒指。然后在第 6 天,这两个戒指都会各自再产生一个 3 天戒指,以此类推。 你知道奥丁在第 0 天之前没有任何戒指。在第 0 天,有一些戒指诞生了。在第 0 天结束时,奥丁拥有 $R_i$ 个 $i$ 天戒指,其中 $1 \leqslant i \leqslant 6$。你知道 $0 \leqslant R_i \leqslant 100$,且至少有一个 $R_i$ 是正数。 幸运的是,你还可以使用知识之井。每次使用时,你可以得知奥丁在某一天(第 1 天到第 500 天之间,包含端点)结束时拥有的戒指总数。由于知识之井的信息容量有限,答案会对 $2^{63}$ 取模。此外,每个测试用例你最多只能使用知识之井 $W$ 次。 你的目标是确定奥丁在第 0 天结束时每种类型的戒指数量——也就是找出每个 $R_i$ 的值。 ### 交互协议 这是一个交互题。 最开始,你的程序应读取一行,包含两个整数 $\mathbf{T}$(测试用例数量)和 $\mathbf{W}$(每个测试用例允许使用知识之井的次数)。然后,你需要处理 $\mathbf{T}$ 个测试用例。 在每个测试用例中,你的程序最多可以与评测机进行 $\mathbf{W} + 1$ 次交互。你可以进行最多 $\mathbf{W}$ 次如下形式的交互: - 你的程序输出一行,包含一个整数 $\mathbf{D}$,表示询问第 $\mathbf{D}$ 天($1 \leqslant D \leqslant 500$)。 - 评测机回复一行,包含一个整数:奥丁在第 $\mathbf{D}$ 天结束时拥有的戒指总数,对 $2^{63}$ 取模。如果你发送了无效数据(如超出范围的数字或格式错误),评测机会回复 $-1$。 在上述 0 到 $\mathbf{W}$ 次交互后,你必须再进行一次如下形式的交互: - 你的程序输出一行,包含六个整数 $\mathbf{R}_1, \mathbf{R}_2, \mathbf{R}_3, \mathbf{R}_4, \mathbf{R}_5, \mathbf{R}_6$,分别表示奥丁在第 0 天结束时拥有的 1 天至 6 天戒指数量。 - 评测机回复一行,包含一个整数:如果你的答案正确,则为 $1$,否则为 $-1$(或格式错误)。 当评测机向你的输入流发送 $-1$(无效数据或答案错误时),它不会再发送其他输出。如果你的程序在收到 $-1$ 后仍然等待评测机回复,将会超时(TLE)。请确保你的程序在收到 $-1$ 后及时退出,以获得 Wrong Answer 判定而不是 Time Limit Exceeded。如果超出内存限制或运行时错误,将获得相应的判定。 #

输入格式

见交互协议。 #

输出格式

见交互协议。 #

说明/提示

**交互样例** 该交互对应于测试集 1。假设我们不知道,评测机设定奥丁在第 0 天拥有每种类型各一个戒指。 ``` t, w = readline_int_list() // 读取 t=50, w=6 printline 3 to stdout // 询问第 3 天 flush stdout n = readline_int() // 读取 n=15 printline 1 to stdout // 询问第 1 天 flush stdout n = readline_int() // 读取 n=7 printline 1 1 1 3 0 0 to stdout flush stdout // 我们做出猜测,尽管还可以再询问四次 verdict = readline_int() // 读取 verdict=-1(评测机判定答案错误) exit // 及时退出,避免超时 ``` 注意,即使我们的猜测与评测机返回的信息一致,但如果答案不正确,依然会被判错。 你可以使用测试工具在本地或平台上测试。若在本地测试,需要并行运行测试工具和你的代码;你可以使用我们的 [interactive runner](https://storage.googleapis.com/coding-competitions.appspot.com/interactive_runner.py)。更多信息请阅读该文件中的注释。 测试工具的使用说明已包含在工具的注释中。建议你添加自己的测试用例。请注意,虽然测试工具旨在模拟评测系统,但它**不是**真实的评测系统,行为可能有所不同。 **数据范围** - $1 \leq T \leq 50$。 **测试集 1(10 分,可见)** - $W = 6$。 **测试集 2(21 分,隐藏)** - $W = 2$。 由 ChatGPT 4.1 翻译