C: Magic Bullet

C: Magic Bullet
担当: 川満
問題概要
• 3次元空間に𝑁 ≤ 50 個の球状の障害物が与えられる
• ある座標からある目標の座標に向かって弾を撃つ
• 弾に魔力があれば障害物を貫通できる
• 目標の座標に届かせるために必要な魔力の量は?
解法
• 3次元幾何問題
• 線分と球の交差判定ができればよい
• 解法の例
1. 球の中心座標が原点になるように線分を平行移動
2. 線分を通る直線上の点のうち、原点に最も近い点を求める
3. 求めた点が線分上にあり、かつ求めた点と原点との距離が
球の半径以下かを判定する
直線上の点で原点に最も近い点
点s
𝑣
• 点sおよび点tを通る直線を考える
点t
• 点sから点tに向かうベクトルを𝑣とする
• 原点から点sに向かうベクトルを𝑠とすると、直線上
の点pは変数𝑥を用いて、 𝑠 + 𝑥 𝑣となる
直線上の点で原点に最も近い点
• 原点と点pの距離の2乗を𝑓(𝑥)とすると、𝑓
𝑥 =
𝑠 + 𝑥 𝑣 2 となる
• 𝑓′
𝑥 = 0となるのは𝑥 = −
𝑠∙𝑣
のときであり、このと
𝑣2
きに点pは原点に最も近くなる
ジャッジ解
• 63行、1181 bytes
Results
• FA: 動画勢「まさかの3000AC」 (18:50)
• 28 ACs, 29 trying teams, 50 submissions