CF89D Space mines
题目描述
很久很久以前,在遥远的银河系……
达斯•韦达发现了反叛军基地的位置。现在,他准备用死星摧毁这个基地(以及基地所在的整颗星球)。
反叛军获知死星即将来袭后,决定使用他们的新型秘密武器——太空地雷。我们来描述一下太空地雷的结构。
每颗太空地雷的本体呈球形(我们称之为雷体),半径为 $r$ ,球心为 $O$。有若干个尖刺从球心伸出。每个尖刺都可以表示为一条线段,连接雷体的中心与某一点 $P$,满足 $|OP| > r$(运输过长尖刺的雷会很困难),其中 $|OP|$ 表示连接 $O$ 和 $P$ 的线段长度。描述 $P$ 点时,方便起见,使用向量 $p$ 满足 $P = O + p$。
死星呈球形,半径为 $R$($R$ 大于任何一个雷体的半径)。它以速度 $|v|$ 沿 $v$ 向量的方向匀速移动。在反叛军发现死星那一刻,死星位于点 $A$。
反叛军在死星的路线上布置了 $n$ 颗太空地雷。我们可以把这些地雷视作静止的。死星不知道地雷的存在,也无法发现它们,因此不会改变运动方向。一旦死星碰到地雷(无论是雷体还是某根尖刺),地雷就会爆炸并摧毁死星。这里的“碰到”指空间中存在一个点同时属于地雷与死星。若死星可以无限长时间移动而不接触任何地雷,则不会被摧毁。
请帮反叛军判断能否利用太空地雷摧毁死星。如果能够,输出死星从被发现到被摧毁的时间。
输入格式
输入的第一行包含 $7$ 个整数 $A_{x},A_{y},A_{z},v_{x},v_{y},v_{z},R$,分别表示死星的初始位置、运动方向和半径($-10 \leq v_{x},v_{y},v_{z} \leq 10$,$|v| > 0$,$0 < R \leq 100$)。
第二行包含一个整数 $n$,表示地雷数量($1 \leq n \leq 100$)。接下来是 $n$ 个数据块,第 $i$ 个数据块描述第 $i$ 颗地雷。
每个数据块的第一行包含 $5$ 个整数 $O_{ix},O_{iy},O_{iz},r_{i},m_{i}$,分别表示第 $i$ 颗地雷的中心坐标、雷体半径和尖刺数量($0 < r_{i} < 100, 0 \leq m_{i} \leq 10$)。之后接下来的 $m_{i}$ 行,每行描述该地雷的一根尖刺,包含 $3$ 个整数 $p_{ijx},p_{ijy},p_{ijz}$,表示这根尖刺指向的向量坐标(满足 $|p_{ij}| > r_i$)。
地雷中心和死星中心的坐标为整数,绝对值不超过 $10000$。保证对于任意 $1 \leq i \leq n$ 均有 $R > r_i$。对于任意两颗雷($i \neq j$),有 $|O_i O_j| > r_i + r_j$。初始状态下,死星与所有地雷互不相交。
输出格式
如果反叛军能够利用太空地雷摧毁死星,输出从死星被发现到被摧毁的时间。
如果死星不会接触任何地雷,输出“-1”。
对于输出的答案,允许 $10^{-6}$ 的绝对或相对误差。
说明/提示
由 ChatGPT 5 翻译