QOJ.ac

QOJ

Limite de temps : 5.0 s Limite de mémoire : 256 MB Points totaux : 100

#12952. 超级马里奥 169

Statistiques

Siggy 是一个电子游戏爱好者,最近他一直在玩《超级马里奥 169》(这是比更流行的《超级马里奥 64》更冷门的续作)。这个游戏完全发生在海洋中,可以用三维坐标系来建模。玩家的目标是操控主角马里奥四处游动,并收集所有的金币,金币数量最多可达 169 枚。

然而,金币并不是直接可见的!相反,游戏中有最多 13 个开关,马里奥可以通过触碰它们来按下开关。按下任何一个开关都会导致最多 13 枚金币出现。此外,每个开关只能被按下一次;当它被按下时,任何之前由上一个开关(如果有的话)触发但尚未收集的金币都会消失,这意味着马里奥以后将无法收集它们。所有的开关和金币都很小,可以被视为点。

为了确保他能以尽可能最优的方式进行游戏,Siggy 想知道收集所有金币所需的最短距离。

输入格式

输入包含多个测试用例。每个测试用例以一行四个整数开始:

$n \ mx \ my \ mz$

其中 $n$ ($1 \le n \le 13$) 是开关的数量,三维点 $(mx, my, mz)$ 是马里奥的起始位置。

接下来重复 $n$ 次以下模式,每个开关一次。模式以一行四个整数开始:

$k \ sx \ sy \ sz$

其中 $k$ ($1 \le k \le 13$) 是该开关触发的金币数量,三维点 $(sx, sy, sz)$ 是该开关所在的位置。随后有 $k$ 行,每行三个整数:

$cx \ cy \ cz$

其中 $(cx, cy, cz)$ 是该开关触发的其中一枚金币的三维坐标。

所有点的坐标 $x, y, z$ 均在 $-1,000 \le x, y, z \le 1,000$ 范围内,且同一个测试用例中的所有点(无论是马里奥的起始点、开关还是金币)都是唯一的。输入以一行四个 $0$ 结束。

输出格式

对于每个测试用例,输出一个数字,表示马里奥收集所有金币所需的最短距离,保留两位小数(四舍五入)。每个数字占一行,不要输出多余空格。输出之间不要打印空行。

样例

样例输入 1

2 5 5 0
4 6 0 0
7 0 0
-11 -1 0
-11 1 0
-10 0 0
2 5 0 0
0 0 0
0 5 0
0 0 0 0

样例输出 1

44.22

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.