#P13110. [GCJ 2019 #1B] Draupnir

    ID: 12933 远端评测题 20000ms 1024MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>2019交互题Special Judge进制位运算Google Code Jam

[GCJ 2019 #1B] Draupnir

Description

奥丁拥有一些能够自我复制的魔法戒指。每个“X 天戒指”会在其诞生后的每隔 XX 天生产一个同样的 X 天戒指。这些戒指共有六种类型:1 天、2 天、……,一直到 6 天。

例如,一个在第 0 天诞生的 3 天戒指,在第 3 天才会产生另一个 3 天戒指。然后在第 6 天,这两个戒指都会各自再产生一个 3 天戒指,以此类推。

你知道奥丁在第 0 天之前没有任何戒指。在第 0 天,有一些戒指诞生了。在第 0 天结束时,奥丁拥有 RiR_iii 天戒指,其中 1i61 \leqslant i \leqslant 6。你知道 0Ri1000 \leqslant R_i \leqslant 100,且至少有一个 RiR_i 是正数。

幸运的是,你还可以使用知识之井。每次使用时,你可以得知奥丁在某一天(第 1 天到第 500 天之间,包含端点)结束时拥有的戒指总数。由于知识之井的信息容量有限,答案会对 2632^{63} 取模。此外,每个测试用例你最多只能使用知识之井 WW 次。

你的目标是确定奥丁在第 0 天结束时每种类型的戒指数量——也就是找出每个 RiR_i 的值。

交互协议

这是一个交互题。

最开始,你的程序应读取一行,包含两个整数 T\mathbf{T}(测试用例数量)和 W\mathbf{W}(每个测试用例允许使用知识之井的次数)。然后,你需要处理 T\mathbf{T} 个测试用例。

在每个测试用例中,你的程序最多可以与评测机进行 W+1\mathbf{W} + 1 次交互。你可以进行最多 W\mathbf{W} 次如下形式的交互:

  • 你的程序输出一行,包含一个整数 D\mathbf{D},表示询问第 D\mathbf{D} 天(1D5001 \leqslant D \leqslant 500)。
  • 评测机回复一行,包含一个整数:奥丁在第 D\mathbf{D} 天结束时拥有的戒指总数,对 2632^{63} 取模。如果你发送了无效数据(如超出范围的数字或格式错误),评测机会回复 1-1

在上述 0 到 W\mathbf{W} 次交互后,你必须再进行一次如下形式的交互:

  • 你的程序输出一行,包含六个整数 $\mathbf{R}_1, \mathbf{R}_2, \mathbf{R}_3, \mathbf{R}_4, \mathbf{R}_5, \mathbf{R}_6$,分别表示奥丁在第 0 天结束时拥有的 1 天至 6 天戒指数量。
  • 评测机回复一行,包含一个整数:如果你的答案正确,则为 11,否则为 1-1(或格式错误)。

当评测机向你的输入流发送 1-1(无效数据或答案错误时),它不会再发送其他输出。如果你的程序在收到 1-1 后仍然等待评测机回复,将会超时(TLE)。请确保你的程序在收到 1-1 后及时退出,以获得 Wrong Answer 判定而不是 Time Limit Exceeded。如果超出内存限制或运行时错误,将获得相应的判定。

Input Format

见交互协议。

Output Format

见交互协议。



Hint

交互样例

该交互对应于测试集 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。更多信息请阅读该文件中的注释。

测试工具的使用说明已包含在工具的注释中。建议你添加自己的测试用例。请注意,虽然测试工具旨在模拟评测系统,但它不是真实的评测系统,行为可能有所不同。

数据范围

  • 1T501 \leq T \leq 50

测试集 1(10 分,可见)

  • W=6W = 6

测试集 2(21 分,隐藏)

  • W=2W = 2

由 ChatGPT 4.1 翻译