工夫すると楽できる!
問題概要
xy 平面上に、各辺が x 軸または y 軸に平行である長方形がある。この長方形の 4 つの頂点のうちの、3 つの頂点の座標 が与えられる。
残り 1 点の座標を求めよ。
制約
考えたこと:一般の長方形の性質
たとえば、次の 4 点をもつ長方形を考える。
この 4 点について、次の性質が成り立っている。
- 座標の XOR 和をとると、3 ^ 3 ^ 23 ^ 23 = 0 となる
- 座標の XOR 和をとると、5 ^ 5 ^ 15 ^ 15 = 0 となる
実はこのような性質は、一般の長方形で成り立つ。というのも、 座標が小さい側の頂点がちょうど 2 個、 座標が大きい側の頂点がちょうど 2 個あることから、これらの XOR 和は 0 となる。 座標についても同様である。
今回
よって、与えられた長方形の残り 1 点の座標を とすると、
- ^ ^ ^ = 0
- ^ ^ ^ = 0
が成り立つ。これらの式にそれぞれ、両辺に , の XOR 和をとることで、次のようになる。
- = ^ ^
- = ^ ^
これが答えとなる。
コード
#include <bits/stdc++.h> using namespace std; int main() { int x1, y1, x2, y2, x3, y3; cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3; int res_x = x1 ^ x2 ^ x3; int res_y = y1 ^ y2 ^ y3; cout << res_x << " " << res_y << endl; }