Kazun の競プロ記録

競技プログラミングに関する様々な話題を執筆します.

AtCoder Beginner Contest 266 C問題 Convex Quadrilateral

問題

atcoder.jp

提出解答

atcoder.jp

問題の概要

座標平面上の四角形  ABCD が与えられる. ただし, 反時計周りに  A,B,C,D と名付けられており, また, 自己交差はない. この四角形は凸であるか?

制約

  • 各点の  x,y 座標の絶対値は  100 以下

解法

座標平面上の3点  P=(P_x, P_y), Q=(Q_x, Q_y), R=(R_x, R_y) において,  \angle QPR を反時計回りで測る場合,  \angle QPR \lt 180^\circ であることと, 外積  \overrightarrow{PQ} \times \overrightarrow{PR} \gt 0 であることは同値である. ただし,  \overrightarrow{u}=(u_x, u_y), \overrightarrow{v}=(v_x, v_y) に対して,  \overrightarrow{u} \times \overrightarrow{v}:=u_x v_y-u_y-v_x である.

これを  \angle DAB, \angle ABC, \angle BCD, \angle CDA に対して適応し, 全ての外積が正かどうかで判定すればよい.