ABC108-B - Ruined Square を解く
ABC108-B - Ruined Square
正方形の座標を反時計回りに
(x1, y1), (x2, y2), (x3, y3), (x4, y4) とする
(x1, y1), (x2, y2) のみが与えられるので、そこから (x3, y3), (x4, y4) を求める問題
いまいちイメージしづらいのでサンプルを見て考えていくことにする
2つ目のサンプルに注目してみる
入力例2
2 3 6 6
出力例2
3 10 -1 7
(x1, y1) = (2, 3), (x2, y2) = (6, 6) のとき
(x3, y3) = (3, 10), (x4, y4) = (-1, 7) となるらしい
それぞれの頂点間でx軸方向の増加量、y軸方向の増加量は
どうなっているかに注目してみる
まずは (x1, y1) → (x2, y2) について
x軸方向の増加量は +4(6 - 2 = 4)
y軸方向の増加量は +3(6 - 3 = 3)
次に (x2, y2) → (x3, y3) について
x軸方向の増加量は -3(3 - 6 = -3)
y軸方向の増加量は +4(10 - 6 = 4)
(x3, y3) → (x4, y4) について
x軸方向の増加量は -4(-1 - 3 = -4)
y軸方向の増加量は -3(7 - 10 = -3)
最後に (x4, y4) → (x1, y1) について
x軸方向の増加量は +3(2 - ( -1 ) = 3)
y軸方向の増加量は -4(3 - 7 = -4)
上記の通り、出現する増加量は(符号は異なるが)2種類しか存在しない
つまり、(x3, y3), (x4, y4) は初めに与えられた2点から得られる
x軸方向の増加量とy軸方向の増加量を足し引きしていくことで求められる
以上を踏まえて書いたコードを以下に示す
提出したコード
# 入力 x1,y1,x2,y2=map(int,input().split()) x3=x2-(y2-y1) y3=y2+(x2-x1) x4=x3-(y3-y2) y4=y3+(x3-x2) # 出力 print(x3,y3,x4,y4)
正直サンプルに合わせるようにごちゃごちゃ何度も試しながら書いたので
コードの意味はあまり理解できていない…
参考にならなかったら申し訳ないです
提出結果はACでした