#P16182. [ICPC 2014 NAIPC] Super Mario 169
[ICPC 2014 NAIPC] Super Mario 169
题目描述
Siggy 是一名狂热的电子游戏爱好者,他最近在玩《超级马里奥 169》(这是更受欢迎的《超级马里奥 64》之后一款非常小众的续作)。这款游戏完全发生在一片海洋中,可以用三维坐标系来建模。玩家的目标是扮演主角马里奥,在水中游动并收集所有金币,金币最多可达 169 枚。
然而,这些金币并不是简单地摆在那里!相反,有多达 13 个开关,马里奥可以通过触摸它们来按下。按下任何一个开关都会导致最多 13 枚金币出现。此外,每个开关只能被按下一次,并且当它被按下时,任何其他未被收集的金币(这些金币是由之前按下的开关揭示的,如果有的话)都会消失,这意味着马里奥将来将无法收集它们。所有开关和金币都足够小,可以视为点。
为了确保他以最优化方式玩游戏,Siggy 想知道收集所有金币所需的最短可能距离。
输入格式
输入中有多个测试用例。每个测试用例的第一行包含四个整数:
其中 ()是开关的数量,三维点 是马里奥的起始点。
然后,以下模式重复 次,每个开关一次。该模式以一行四个整数开始:
其中 ()是由该开关激活的金币数量,三维点 是该开关所在的位置。接下来是 行,每行三个整数:
其中 是由该开关激活的某个金币的三维坐标。
所有点的坐标 、、 均在 范围内,并且一个测试用例中的所有点(包括马里奥的起点、开关和金币)都是唯一的。输入以一行四个 0 结束。
输入数据约 60 KB。
输出格式
对于每个测试用例,输出一个数字,表示马里奥为了收集所有金币所需旅行的最短距离,精确到两位小数(四舍五入)。每个数字输出在自己的行上,不要包含空格。输出之间不要打印空行。
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
44.22
提示
翻译由 DeepSeek V3.2 完成