QOJ.ac

QOJ

时间限制: 1.0 s 内存限制: 256 MB 总分: 100

#13149. 不可能的任务

统计

Allen 是一名政府特工,他被指派潜入一个黑帮秘密基地,以获取有关该组织运作的关键情报。

该秘密基地在笛卡尔坐标系中是一个矩形,边界为 $(x_L, y_L)$、$(x_L, y_R)$、$(x_R, y_L)$ 和 $(x_R, y_R)$,其中 $x_L < x_R$ 且 $y_L < y_R$。基地内放置了 $N$ 个传感器。第 $i$ 个传感器位于 $(x_i, y_i)$,其有效探测半径为 $r_i$,可以探测到任何处于 $(x_i, y_i)$ 的半径 $r_i$ 范围内(严格内部)的人。换句话说,当且仅当 $(x_i, y_i)$ 与位置 $(x_a, y_a)$ 之间的欧几里得距离严格小于 $r_i$ 时,第 $i$ 个传感器才能探测到该位置。已知任意两个传感器 $i$ 和 $j$ 之间的欧几里得距离严格大于 $r_i + r_j$。注意,两点 $(x_a, y_a)$ 和 $(x_b, y_b)$ 之间的欧几里得距离为 $\sqrt{|x_a - x_b|^2 + |y_a - y_b|^2}$。

Allen 从位置 $(x_s, y_s)$ 开始潜入任务,目标位于 $(x_t, y_t)$。Allen 有能力以直线方式高速奔跑,但他需要花费额外的时间来改变奔跑轨迹(以调整脚步)。尽管他跑得很快,但他仍需确保在奔跑过程中不被任何传感器探测到,即他的奔跑轨迹上不存在任何一点严格处于某个传感器的有效探测半径内。

令 $P = \{(x_{p_1}, y_{p_1}), \dots, (x_{p_{|P|}}, y_{p_{|P|}})\}$ 为 Allen 改变奔跑轨迹的位置集合,因此,Allen 的奔跑轨迹 $P$ 为 $(x_s, y_s) \to (x_{p_1}, y_{p_1}) \to \dots \to (x_{p_{|P|}}, y_{p_{|P|}}) \to (x_t, y_t)$,其中 $(x_a, y_a) \to (x_b, y_b)$ 表示 Allen 从 $(x_a, y_a)$ 到 $(x_b, y_b)$ 进行直线奔跑。当且仅当在轨迹 $P$ 下,Allen 不会被任何传感器探测到且不会跑出秘密基地(尽管 Allen 被允许沿着秘密基地的边界奔跑)时,集合 $P$ 是可行的。注意,$P$ 中的点 $(x_p, y_p)$ 不一定是整数;它们可以是实数。

你的任务是找到任意一个包含不超过 1000 个点的可行集合 $P$。

输入格式

输入的第一行包含五个整数:$N, x_L, y_L, x_R, y_R$ ($0 \le N \le 50; 0 \le x_L < x_R \le 1000; 0 \le y_L < y_R \le 1000$),分别表示传感器数量和秘密基地的范围。 第二行包含两个整数:$x_s, y_s$ ($x_L < x_s < x_R; y_L < y_s < y_R$),表示 Allen 的初始位置。 第三行包含两个整数:$x_t, y_t$ ($x_L < x_t < x_R; y_L < y_t < y_R$),表示 Allen 的目标位置。保证 $x_s = x_t$ 或 $y_s = y_t$。 接下来的 $N$ 行,每行包含三个整数:$x_i, y_i, r_i$ ($x_L < x_i - r_i < x_i + r_i < x_R; y_L < y_i - r_i < y_i + r_i < y_R; 1 \le r_i \le 1000$),表示位于 $(x_i, y_i)$ 且有效探测半径为 $r_i$ 的传感器。保证任意两个传感器 $i$ 和 $j$ 之间的欧几里得距离大于 $r_i + r_j$。同时保证 $(x_s, y_s)$ 和 $(x_t, y_t)$ 到任意传感器 $i$ 的欧几里得距离大于 $r_i$。

输出格式

输出的第一行是一个整数,表示可行集合 $P$ 的大小。接下来的 $|P|$ 行,每行包含两个实数(由单个空格分隔);第 $j$ 行包含 $x_j, y_j$,表示 $P$ 中的第 $j$ 个点。你可以输出任何包含不超过 1000 个点的可行集合 $P$。

说明

由于输出涉及浮点数,我们定义 $\epsilon = 10^{-6}$ 来验证输出。 令 $Q_1 = (x_s, y_s)$,$Q_{j+1} = P_j$(对于所有 $1 \le j \le |P|$),以及 $Q_{|P|+2} = (x_t, y_t)$。当且仅当 $P$ 包含不超过 1000 个点且满足以下所有条件时,认为 $P$ 是正确的:

  • 对于所有 $1 \le k \le |P|$,满足 $x_L - \epsilon \le x_{p_k} \le x_R + \epsilon$ 且 $y_L - \epsilon \le y_{p_k} \le y_R + \epsilon$(Allen 没有跑出秘密基地)。
  • 对于所有 $1 \le k < |Q|$,令 $S_k$ 为连接 $Q_k$ 和 $Q_{k+1}$ 的线段(Allen 在进行直线奔跑)。对于所有 $1 \le i \le N$,令 $(x_{k,i}, y_{k,i})$ 为 $S_k$ 上距离第 $i$ 个传感器位置 $(x_i, y_i)$ 最近的点。令 $d_{k,i}$ 为 $(x_{k,i}, y_{k,i})$ 与 $(x_i, y_i)$ 之间的欧几里得距离。则应满足约束 $r_i \le d_{k,i} + \epsilon$(Allen 未被任何传感器探测到)。
  • $Q$ 中的所有点都是不同的。两点 $(x_a, y_a)$ 和 $(x_b, y_b)$ 被认为是不同的,当且仅当 $|x_a - x_b| > \epsilon$ 或 $|y_a - y_b| > \epsilon$。

样例

样例输入 1

3 2 2 50 26
4 14
48 14
15 13 7
36 16 6
46 18 3

样例输出 1

2
13.25 23.1234567
36.591003 7.1

样例输入 2

1 0 0 1000 1000
100 501
900 501
500 251 250

样例输出 2

0

说明

上图展示了样例输出中的 $P$。注意,在此样例中存在仅包含一个点的可行 $P$,尽管你不需要找到该 $P$。

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.