The 46th World Championship ICPC T問題:Carl’s Vacation

問題. Carl’s Vacation

2 つのピラミッドがある。そのピラミッドの頂上間の最短距離を求めよ。

ピラミッドの形状は  (x_1, y_1, x_2, y_2, h) で表される。ピラミッドの形状は真上から見ると正方形で、正方形のある一辺をピラミッドを左にしながら点  (x_1, y_1) から点  (x_2, y_2) へ向かう線分で表す。ピラミッドの頂点は正方形の中心で高さ  h である。
2 つのピラミッドは交差しない。

制約 -10^5 \le x_1, x_2, y_1, y_2 \le 10^5  \left( (x_1, y_1) \neq (x_2, y_2) \right),  1 \le h \le 10^5

解法.三分探索

初めに、ピラミッドの頂上から地上との境界である辺上の一点  P への最短距離を考える。
ピラミッドを真上から見た図を下に載せる。対称性から青色の部分についてのみ考える。 P の座標はパラメータ  t \in [0, S / 2] を用いて  P = P_1 + t \times (P_2 - P_1) となる。このときの距離は  d(t) = \sqrt{t^2 - S t + \frac{S^2}{2} + h^2} である。ただし、  S は正方形の一辺の長さとする。 d(t) t に関する凸関数である。

   

それぞれのピラミッドの頂上から辺上までの距離はそれぞれパラメータ  t_1 \in [0, S_1 / 2 ] t_2 \in [0, S_2 / 2] として  d(t_1) d(t_2) となる( S_1, S_2 はそれぞれ一番目と二番目のピラミッドの一辺の長さ)。また、地上でのピラミッド間の距離はユークリッド距離で、  t_1, t_2 の凸関数として表される。したがって、2 つのピラミッドの頂点間の距離は凸関数の和となり、全体で凸関数なので三分探索で答えを求めることができる(三分探索 - 忘れても大丈夫)。


 

今年の ICPC 世界大会はエジプトで行われたみたい