AtCoder Beginner Contest 251 G問題 Intersection of Polygons
問題
提出解答
問題の概要
座標平面上に凸 角形 がある. この はの頂点は反時計回りに である.
個の凸 角形 がある. このとき, は を 軸正の向きに , 軸正の向きに だけ平行移動して得られる凸 角形である.
次の 個の質問 に答えよ.
- 質問 : 座標平面上の点 は 全ての に対して, その内部 (頂点, 辺含む) か?
制約
- は凸 角形である.
解法
この解法では次の事実を用いている.
実数 に対して, 以下は同値である.
- に対して,
以降では座標平面上の点と原点に対する位置ベクトルを同一視する. また, の内部 (と辺と頂点の和集合) を再び と書くことにする. そして, とし, に対して, で の 番目の頂点の座標とする. つまり.
である.
まず, 点 が凸 角形 の内部 (頂点, 辺) であるための必要十分条件を考える. は における点 を通る 本の直線の分割によって表現できる. 特に, の頂点は反時計回りで与えられていることから, 以下は全て同値になる.
- 任意の に対して, から への有向線分の左側にある.
- 任意の に対して,
となる. なお, 2つの平面ベクトル に対して, で のクロス積を表すとする. ここで,
であり, にはよらず, にのみによって決定される. よって, とすると,
である.
今, に関する条件を調べたので, 最後にこれを動かすことにより,
となる. よって, 前計算で を に対して求めておくことにより, 各質問を で処理できる.
以上から, 前計算で 時間, 質問あたり で求める事ができるので, 全体で で終了させることができる.