計算量は良くないですがすぐ思いつくので.あと,誤差におびえずに済む.
問題はこちら
問題概要
二次元平面上の頂点集合とが与えられる.のすべて頂点に対して同様に,原点中心の回転と平行移動を行ってと一致させられるか判定せよ.解説
実際に回転とか平行移動をしてしまうと,座標が小数になってしまうので判定が難しそう.問題はのある点をのある点に対応させることができるか.つまり,点の相対的な位置のみが重要となる.
- のとき,もちろんYes
- のとき,の頂点間の距離が一致するときYes,そうでないときNo
以降のときについて考える.
と対応するの点を全探索する.を,をと対応させる(頂点間の距離は一致),とが対応するためには「との距離との距離」と「との距離との距離」が成り立つ必要がある.
ただし,この条件が成り立つだけではダメで,例えば以下のような物(上図のを反転させたもの)との区別ができない(以下の例はNo).
区別するためには点がある方向が分かるようなもの(外積など)を調べればよい.これがとで一致していればとは対応することになる.のすべての点に対してのこの値(からの距離と,上記の情報をもつ値)の集合とのすべての点に対してのこの値の集合が一致していればYesとなる.すべてのについて調べるので,値の計算にかかる.以下の提出プログラムでは実装をサボってソートして集合の比較しているので余計にかかってるので全体で.
補足
なんで頂点の距離だけでいいのかというと,中学数学とかでやった三角形の合同条件,「3組の辺がそれぞれ等しい」ってやつにより,距離が決まると(反転を無視して)位置が決まるから.
行う操作が回転と平行移動だけなので点の相対的な距離が変化しないってのもポイント.
提出プログラム
https://atcoder.jp/contests/abc207/submissions/23782969感想
解法はすぐ思いつくけど実装でてこずる.この難度をDに置かれると初心者の人がキツい.このレベルのdiffの崖は許されなさそう.