你负责为一家外星采矿公司处理信号,你的飞船目前正在接近一颗小行星。初步扫描显示小行星上存在 $k$ 个矿藏,但它们的具体位置未知。
小行星的表面可以看作是一个整数坐标网格。每个矿藏都位于未知的整数坐标处,第 $i$ 个矿藏的坐标为 $(x_i, y_i)$,其中 $-b \le x_i \le b$ 且 $-b \le y_i \le b$,这里 $b$ 是一个整数,对应于你初始扫描的范围。
为了确定矿藏的精确位置,你可以向小行星表面发送探测器。探测器以多波次的形式发送,每波可以发送多个探测器。
Eroding mud face exposing new minerals. Photo: Michael D. Turnbull, licence: CC BY-SA.
假设你向表面发送了一波 $d$ 个探测器,坐标分别为 $(s_j, t_j)$,其中 $1 \le j \le d$。当探测器到达其坐标时,它会测定到所有 $k$ 个矿藏的曼哈顿距离并将其发送回飞船。所有数据包同时到达,且无法确定是哪个探测器返回了哪些距离。因此,这一波探测返回了 $k \cdot d$ 个整数距离: $$|x_i - s_j| + |y_i - t_j| \quad \text{对于所有 } i \in \{1, \dots, k\} \text{ 和 } j \in \{1, \dots, d\}$$
你需要最小化发送到表面的探测波次数。
交互
这是一个交互式问题。交互开始时,你需要读取一行,包含三个整数 $b, k, w$:网格边界 $b$、矿藏数量 $k$ 以及你最多可以发送的波次数 $w$。
随后,你可以进行最多 $w$ 次询问,每次询问对应一波探测。询问以 ? 开头,后跟 $2d$ 个空格分隔的整数,例如 ? s1 t1 ... sd td,其中该波探测器数量 $d$ 必须满足 $1 \le d \le 2000$。探测器坐标 $(s_i, t_i)$ 必须满足 $-10^8 \le s_i \le 10^8$ 且 $-10^8 \le t_i \le 10^8$。系统返回一行包含 $k \cdot d$ 个非递减顺序的整数:所有矿藏与探测器坐标之间的曼哈顿距离对。所有波次的探测器总数不得超过 $2 \cdot 10^4$。
交互结束时,你需要打印一行,以 ! 开头,后跟 $k$ 个点 $x_1, y_1, x_2, y_2, \dots, x_k, y_k$,用空格分隔。这必须是你输出的最后一行。
如果打印了所有矿藏的位置,你的提交将被视为正确。你可以以任何顺序打印它们。
数据范围
始终满足 $1 \le b \le 10^8$,$1 \le k \le 20$,$2 \le w \le 10^4$。
你的解决方案将在多组测试数据上进行测试,每组测试数据包含若干测试用例。要获得某一组的分数,你需要解决该组中的所有测试用例。你的最终得分为单次提交的最高得分。
| 组别 | 分数 | 数据范围 |
|---|---|---|
| 1 | 9 | $k = 1, w = 10^4$ |
| 2 | 19 | $w \ge 500$ |
| 3 | 11 | $w \ge 210$ |
| 4 | 7 | $w \ge 130$ |
| 5 | 20 | $w \ge 3, b \le 10^4$ |
| 6 | 15 | $w \ge 3, b \le 10^7$ |
| 7 | 19 | 无其他限制 |
样例
在此示例中,有 $k = 2$ 个矿藏,位置分别为 $(1, 2)$ 和 $(-3, -2)$,如图中红星所示。在第一波中,你发送了 $d = 3$ 个探测器到 $(-4, -3)$、$(-1, 0)$ 和 $(2, -1)$,如图中黑点所示。这一波返回了 6 个距离:$2, 4, 4, 4, 6, 10$。
在下一波中,你发送了 $d = 2$ 个探测器到 $(1, 2)$ 和 $(0, -2)$。这一波返回了 4 个距离:$0, 3, 5, 8$。
输入格式 1
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
输出格式 1
(交互过程)