QOJ.ac

QOJ

时间限制: 2 s 内存限制: 2048 MB 总分: 100 交互

#8270. 矿床

统计

你负责为一家外星采矿公司处理信号,你的飞船目前正在接近一颗小行星。初步扫描显示小行星上存在 $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

(交互过程)

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.