C - Magic Bullet Editorial by maspy


JAG ページの PPTX が開けなかったので簡単に書いておきます。

問題概要

\(N\) 個の球体の情報が与えられる。中心の座標は \((x_i, y_i, z_i)\)、半径は \(r_i\) であり、消費魔力は \(l_i\) である。

\(2\)\(S\), \(D\) が与えられる。線分 \(SD\) が球 \(i\) と交わるとき、魔力 \(l_i\) を消費する。消費魔力の総和を答えよ。

解法

すべての球体との接触判定を、個別にやればよいです。 線分 \(ST\) 上の点は、\((1-t) S + tT\)\(0\leq t\leq 1\))とパラメータ表示されます。したがって、線分と球体の中心との距離はある \(a, b, c\in \mathbb{R}\) を用いて \(\min \{\sqrt{at^2+bt+c} | 0\leq t\leq 1\}\) と書くことができます。

これは高校数学の基本問題という感じで求まります。その結果が半径 \(r\) 以下であるかを判定すればよいです。

posted:
last update: