ABC243C
ABC243C の解説
解答コード
https://atcoder.jp/contests/abc243/submissions/30091837
問題
2次元平面座標で,同じy座標を移動する点同士が衝突するかどうかを判定する問題です.
解説
いつも通り,無言で投下する概要図です.
点はx方向にしか移動できないので,y座標の値が異なれば衝突しません.
このことから,同じy座標の値の点同士を評価すれば良いことがわかります.
では,同じY座標同士をまずグループ化します.
yの制約が10^9 なので,その分だけ配列を作成するのは,合理的ではありません.
これを実現する方法は2つあると思います.
1) 最初にyでソートする.
2) 辞書型でまとめる <- 今回はこっち
今から,Y座標ごとに点をまとめます.
このとき,その点が「L向きなのかR向きなのか」もまとめてあげるとスッキリします.すなわち,座標と向き(L or R)を同時に処理します.
上記の内容を実現するために,一旦標準入力を全部読み取ります.
収納するためのdict と向きを定義します.向きを定義した意味は後程わかります.
それでは,あらかじめ読み取っておいた標準入力を順番に処理していきます.
各y座標の値ごとに長さ2の二次元配列を用意して,
index=0にR向きのx座標を
index=1にL向きのx座標を入れます.
最後に,各y座標ごとに
R向きでx座標が最小の点と,L向きでx座標が最大の点が衝突できるかを
大小関係をもとに判断します.
以上,ABC243Cの解法でした.
<参考解説リンク>