QOJ.ac

QOJ

حد الوقت: 60 s - 120 s حد الذاكرة: 1024 MB مجموع النقاط: 40

#12291. 传送门

الإحصائيات

在不久的将来,在附近的一个星系中,你发现自己想要去旅行,暂时摆脱作为桑德拉星球(Planet Thundera)唯一纱线制造商的责任。你决定前往最令人放松的星球——关爱星球(Planet Care-a-Lot)。为了旅行,你打算使用星际传送器网络。

传送器是漂浮在太空中某处的微型机器。你可以从空间中的任何一点远程使用它,但由于传送距离守恒原理,它能将你传送到空间中的任何其他点,且该点与传送器之间的 $L1$ 距离必须与你传送前所在位置与该传送器之间的 $L1$ 距离完全相同。两个坐标为 $(x_0, y_0, z_0)$ 和 $(x_1, y_1, z_1)$ 的点之间的 $L1$ 距离由 $|x_0 - x_1| + |y_0 - y_1| + |z_0 - z_1|$ 给出。不幸的是,你的太空喷气背包坏了,所以你无法独自移动;要旅行,你只能使用传送器。你从桑德拉星球出发。你可以使用一个传送器从桑德拉星球旅行到点 $p_1$,然后使用另一个传送器从 $p_1$ 旅行到 $p_2$,依此类推。最后一次传送必须将你准确地带到关爱星球。

给定三维空间中两个星球和所有可用传送器的位置,找出是否仅使用传送器就能完成这次旅行。如果可以完成,到达目的地所需的最少传送次数是多少?(即使两次传送使用了同一个传送器,它们仍计为单独的传送。)

输入给出的点坐标均为整数,且落在一定范围内。但是,你可以传送到坐标为整数或非整数的中间点,并且对你可以访问的点没有范围限制。

输入格式

输入的第一行给出测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含一个整数 $N$,表示可用的传送器数量。随后有 $N+2$ 行,每行包含三个整数 $X_i, Y_i, Z_i$。其中第一行表示你的家乡星球桑德拉的坐标。第二行表示目的地星球关爱星球的坐标。其余 $N$ 行中的每一行表示一个传送器的坐标。

输出格式

对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是如果无法仅使用可用传送器从桑德拉到达关爱星球则为 IMPOSSIBLE,如果可以到达,则为一个表示所需最少传送次数的整数。

数据范围

内存限制:1 GB。 $1 \le T \le 100$。 对于所有 $i \neq j$,$(X_i, Y_i, Z_i) \neq (X_j, Y_j, Z_j)$。(没有两个描述的对象具有相同的坐标。)

子任务 1 时间限制:60 秒。 $1 \le N \le 100$。 $-10^3 \le X_i, Y_i, Z_i \le 10^3$。

子任务 2 时间限制:120 秒。 $1 \le N \le 150$。 $-10^{12} \le X_i, Y_i, Z_i \le 10^{12}$。

样例

样例输入 1

3
1
0 0 0
0 4 0
0 3 0
2
0 0 1
0 0 11
0 0 3
0 0 0
3
0 0 0
6 2 0
6 0 0
3 0 0
6 1 0

样例输出 1

Case #1: IMPOSSIBLE
Case #2: 3
Case #3: 2

说明

在样例 1 中,唯一的传送器距离桑德拉正好 3 个单位,我们只能用它去往另一个距离该传送器正好 3 个单位的位置。从那个位置出发,我们仍然只能到达距离该传送器 3 个单位的位置。由于关爱星球距离该传送器 1 个单位,我们永远无法到达它。

在样例 2 中,最优策略是先使用位于 $(0, 0, 3)$ 的传送器前往 $(0, 0, 5)$。然后,从那里使用位于 $(0, 0, 0)$ 的传送器前往 $(0, 0, -5)$。最后,从那里再次使用位于 $(0, 0, 3)$ 的传送器前往 $(0, 0, 11)$。注意,两次使用位于 $(0, 0, 3)$ 的传送器导致我们行进的距离不同,因为我们每次距离传送器的距离不同。还要注意,两次使用该传送器计为两次单独的传送。

在样例 3 中,最优策略是先使用位于 $(3, 0, 0)$ 的传送器前往 $(6, 0, 0)$。然后,从那里使用位于 $(6, 1, 0)$ 的传送器前往 $(6, 2, 0)$。注意,即使在 $(6, 0, 0)$ 处有一个传送器,仅仅占据与传送器相同的位置并不算作使用它。

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.