ABC467 D - Concentric Circles
同心円
考え方
$P$ と $Q$ を両方通る円の中心は、必ず線分 $PQ$ の垂直二等分線上にある。
$R$ と $S$ についても同様。
よって、$PQ \nparallel RS$ であれば、垂直二等分線の交点を中心にすればよく、答えは "Yes"。
さて、$PQ \parallel RS$ である場合はどうか。
この場合は、垂直二等分線同士が平行になりそうに見えるが、同一直線になる場合だけは答えは "Yes"。
これは四角形 $PQRS$ または $PQSR$ が等脚台形になることを意味する。
したがって、$PR=QS$ かつ $PS=QR$ であるなら答えは "Yes"。
まとめると、$PQ \nparallel RS$ または $(PR=QS$ かつ $PS=QR)$ なら "Yes" で、それ以外は "No"。
平行かどうかはベクトルの外積で判定でき、点と点の距離もベクトルの絶対値の $2$ 乗を用いればよい。
入力例1での動作
テストケース数を受け取る。
q: 3
$1$ つめのテストケースを受け取る。
p: (2, 0)
q: (1, 1)
r: (-1, 0)
s: (1, 2)
答え用の変数 result を "Yes" で初期化する。
result: "Yes"
$\overrightarrow{PQ}=(-1,1)$、$\overrightarrow{RS}=(2,2)$ である。
この $2$ つのベクトルの外積は $-4$ であり、$PQ$ と $RS$ は平行でない。
result は変更しない。
result: "Yes"
result を出力する。
$2$ つめのテストケースを受け取る。
p: (1, 0)
q: (-1, 0)
r: (0, 1)
s: (0, -1)
答え用の変数 result を "Yes" で初期化する。
$\overrightarrow{PQ}=(-2,0)$、$\overrightarrow{RS}=(0,-2)$ である。
この $2$ つのベクトルの外積は $4$ であり、$PQ$ と $RS$ は平行でない。
result は変更しない。
result: "Yes"
result を出力する。
$3$ つめのテストケースを受け取る。
p: (4, 0)
q: (3, 1)
r: (2, 0)
s: (1, 1)
答え用の変数 result を "Yes" で初期化する。
$\overrightarrow{PQ}=(-1,1)$、$\overrightarrow{RS}=(-1,1)$ である。
この $2$ つのベクトルの外積は $0$ であり、$PQ$ と $RS$ は平行である。
次に、各ベクトルの長さの二乗を計算する。
(r-q).norm2(): 2
(s-p).norm2(): 10
この $2$ つは等しくないので、result を "No" にする。
result: "No"
result を出力する。
以上より、順に "Yes"、"Yes"、"No" と出力すればよい。
注意点
座標の差の二乗和や外積は、int 型からはみ出る。
long long 型を用いること。
別解
特になし。