#P13989. [PO Final 2023] 锯木 / The Sawmill

    ID: 15760 远端评测题 1000ms 1024MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>2023交互题Special JudgePO(瑞典)

[PO Final 2023] 锯木 / The Sawmill

题目背景

1G, 1s, sagverket

题目描述

Alma 有很多木板,她想把这些木板锯成若干段。因此,她来到了一家能够自动切割并分类木板的先进锯木厂。每块木板可以表示为一条无限长的 x x 轴,锯木厂会在 N+1 N+1 个位置 x1,x2,,xN,v x_1, x_2, \dots, x_N, v 处切割,其中 v v 是由用户选择的一个数。随后,所有有限长度的木段会被分类并输出。Alma 想知道这些数 x1,x2,,xN x_1, x_2, \dots, x_N ,但似乎没有人知道锯木厂内部的结构。于是,她计划通过投入若干选择得当的 v v 来找出这些数。

N N 个秘密整数 1x1<x2<<xN109 1 \le x_1 < x_2 < \dots < x_N \le 10^9 。注意这些数两两不同。你的目标是找出这些数。你可以向锯木厂送入木板。锯木厂以一个整数 v v 作为输入(1v109 1 \le v \le 10^9 ),并执行如下操作:

  1. 创建列表 L=[x1,x2,,xN,v] L = [x_1, x_2, \dots, x_N, v]
  2. L L 排序。
  3. 创建列表 D D ,其中对所有 i=1,2,,N i = 1, 2, \dots, N ,有 Di=Li+1Li D_i = L_{i+1} - L_i
  4. D D 排序,并返回其中的 N N 个整数。

你最多可以送入 N N 块木板,但在子任务 4 4 中可以送入 N+1 \textcolor{red}{N+1} 块木板

实现细节

你的程序应首先读入两个整数 N N T T 1N1000,1T5 1 \le N \le 1000, 1 \le T \le 5 )。N N 是需要找出的秘密数字个数,T T 是测试组编号。给出 T T 的原因是为了便于获得部分分。

接着,你可以开始送入木板。打印一行 ? v\texttt{? }v 以向锯木厂送入带有数字 v v 的木板。数 v v 必须满足 1v109 1 \le v \le 10^9 。随后,你的程序应在一行中读入 N N 个整数,即 D1,D2,,DN D_1, D_2, \dots, D_N 。注意:如果 v v 恰好等于某个 xi x_i ,则 D1 D_1 可能为 0 0

当你已经找到 x1,x2,,xN x_1, x_2, \dots, x_N 时,你应打印一行 !\texttt{!} x1 x_1 x2 x_2 x3 x_3 \ldots xN x_N

然后你的程序应终止,并且不再打印任何内容。

请在每次询问后都刷新缓冲区,否则可能会因为超时而被判为超时。在 C++ 中可使用例如 cout << flushfflush(stdout);在 Python 中可使用 stdout.flush();在 Java 中可使用 System.out.flush()

输入格式

见「实现细节」。

输出格式

见「实现细节」。

2 2

3 3

2 6

? 5

? 10

! 2 8

提示

子任务

本题采用捆绑测试。

子任务编号 分值 限制
1 1 15 15 N=1 N = 1
2 2 N=2 N = 2
3 3 11 11 xiN+1 x_i \le N + 1
4 4 37 37 N100,xi104 N \le 100, x_i \le 10^4 ,可最多发送 N+1 \textcolor{red}{N+1} 块木板。
5 5 22 22 无额外约束。