#L4190. 时尚大方认识的

时尚大方认识的

题目描述:

你为一家地外采矿公司处理信号,你的飞船正在接近一颗小行星。初步扫描显示,小行星上存在 kk 个矿床,但其确切位置尚不清楚。

小行星表面可以看作是一个整数坐标网格。每个矿床都位于未知的整数坐标上,第 ii 个矿床的坐标为 (xi,yi)(x_i, y_i),其中

bxib,byib-b \le x_i \le b,\quad -b \le y_i \le b

整数 bb 与初始扫描的区域大小相对应。

为了确定矿床的精确位置,你可以向小行星表面发送探测器组。一组探测器由数个探测器一起组成。

假设你发送了一组 dd 个探测器,对于 1jd1 \le j \le d,第 jj 个探测器发送到坐标 (sj,tj)(s_j, t_j)。当探测器到达指定位置时,它会确定到这 kk 个矿床的每个的曼哈顿距离,并把这些距离发回给飞船。所有数据包会同时到达,并且不可能确定哪个探测器发回的距离是什么。因此这组探测器会返回 kdk \cdot d 个整数距离:

$$|x_i - s_j| + |y_i - t_j| \quad \forall i \in \{1,\dots,k\},\ j \in \{1,\dots,d\} $$

你需要最小化发送到小行星表面的探测器组数。


交互过程

这是一道交互题。

交互开始于你读入一行三个整数 bb, kkww:网格的边界 bbkk 个矿床和最多可以发送的探测器组数 ww

然后你可以询问最多 ww 次,每次表示一个探测器组。一个询问由一个 ? 和紧接着的 2d2d 个由空格分隔的整数组成,如

? s₁ t₁ ⋯ s_d t_d

其中 dd 为这组探测器中包含的探测器数,必须满足 1d20001 \le d \le 2000(si,ti)(s_i, t_i) 是第 ii 个探测器的坐标,必须满足 108si108-10^8 \le s_i \le 10^8108ti108-10^8 \le t_i \le 10^8。回答是一行 kdk \cdot d 个非递减顺序给出的整数:表示所有矿床和探测器对之间的曼哈顿距离。所有探测器组中包含的探测器数不能超过 21042 \cdot 10^4

交互结束于你输出一行由 ! 和紧接着的 kk 个点 x1 y1 x2 y2  xk ykx_1\ y_1\ x_2\ y_2\ \ldots\ x_k\ y_k,点坐标用空格分隔。这必须是你输出的最后一行。

特别提示:对于每行输出,你必须输出换行(\n),并刷新缓冲区。

如果你输出了所有矿床的位置,那么你的提交会被认为是正确的。你可以以任意顺序输出。


限制和计分

数据满足:

$$1 \le b \le 10^8,\quad 1 \le k \le 20,\quad 2 \le w \le 10^4 $$

你的提交将在一些子任务中进行测试,每个子任务都有一定的分数。每个子任务都包含一些测试用例。要获得子任务的分数,你需要解决子任务中的所有测试用例。你的最终得分将是单次提交的最高分。

子任务编号 附加限制 分值
1 k=1k=1, w=104w=10^4 9
2 w500w \ge 500 19
3 w210w \ge 210 11
4 w130w \ge 130 7
5 w3w \ge 3, b104b \le 10^4 20
6 w3w \ge 3, b107b \le 10^7 15
7 无附加限制 19

样例交互

样例中有 k=2k=2 个矿床位于 (1,2)(1,2)(3,2)(-3,-2),用红星标出。在第一组探测器中,你可以发送 d=3d=3 个探测器到 (4,3)(-4,-3), (1,0)(-1,0)(2,1)(2,-1),用黑点标出。这组探测器会返回 66 个距离:

2,4,4,4,6,102, 4, 4, 4, 6, 10

对于下一组探测器,你可以发送 d=2d=2 个探测器到 (1,2)(1,2)(0,2)(0,-2)。这组探测器会返回 44 个距离:

0,3,5,80, 3, 5, 8

交互过程如下:

读(程序输入) 写(程序输出)
4 2 10
? -4 -3 -1 0 2 -1
2 4 4 4 6 10
? 1 2 0 -2
0 3 5 8
! 1 2 -3 -2