ARC029 B問題 : 高橋君と禁断の書

問題. 高橋君と禁断の書

2辺の長さが  a, b の矩形  R が与えられる.次の  n 個の質問に答えよ.
 質問:2辺の長さが  c, d の矩形  R' が与えられたときに, R' R を含むか判定せよ

制約 1 \le n \le 5,000,  1 \le a, b, c, d \le 300,000

解法1. 二分探索

 a \le b かつ  c \le d とする. a \le c かつ  b \le d ならば  R を傾けずに  R' に含むことが可能である.それ以外の場合に, R を傾けて  R' に含めることができるかを考える.

まず,下の図のように  b を底面として角度  \theta だけ傾けるとする.このとき, R を含むことができる最小の矩形の横と縦の長さを  w, h とすると, w = a \sin (\theta) + b \cos(\theta), \,\, h = a \cos(\theta) + b \sin(\theta)
となる. \theta を大きくすると  h は大きくなり,逆に  w は小さくなる.また, \theta を小さくすると  h は小さくなり,逆に  w は大きくなる.したがって,高さが  c 以下となる最大の角度  \theta \in [0, \frac{\pi}{2}) を二分探索で求めた後に, R' に含まれるかを判定する.このとき, R' は軸並行に置かれており,高さ  c,幅  d とする(高さ  d, 幅  c の場合は調べる必要はない).
同様に, R の底面を  a として,高さが  d 以下となる最大の角度を求めた後に, R' (高さ  d, 幅  c)に含まれるかを判定する.いずれかの場合で成り立つときに  R' R を含むことができる.
    f:id:tatanaideyo:20190515134431p:plain:w400

計算時間 O(n)

 

解法2. アドホック

antaさんの解法 にリンクがあった.
 Wetzel, John E. "Rectangles in Rectangles." Mathematics Magazine 73, no. 3 (2000): 204-11.

 R' R を含むための必要十分条件は,
  a \le c かつ  b \le d,
  または,
  b > d かつ  c \ge \frac{2 a b d + (b^2 - a^2) \sqrt{a^2 + b^2 - d^2}}{a^2 + b^2}
となることである.

計算時間 O(n)

アドホックな方法はへぇ〜という感じで証明は読んでいない.幾何が苦手すぎる.
antaさん調べてACしたのか,知っていたのか分からないけど解くの速すぎ.