문제 URL : https://www.acmicpc.net/problem/1485
문제 접근법 :
- 4점을 정렬하면 아래 그림과같은 사각형의 순서가 나옵니다. A~D 점으로
- 그후 4개의 모든선이 길이가 같아야겠죠? 정사각형이니까
- 마지막으로 길이가 같다고 정사각형은 아닙니다. 각도또한 90도인지 확인하기위해 피타고라스 공식을 이용하여
- AD^2 = AB^2+BD^2 인지 확인하고 CB의 길이도 마찬가지입니다.
소스코드 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#include <bits/stdc++.h>
using namespace std;
#define ll long long
vector<pair<ll, ll>> v;
void init() {
v.clear();
}
void input() {
v.resize(4);
for (int i = 0; i < 4; i++)
cin >> v[i].first >> v[i].second;
}
ll length(ll x1, ll y1, ll x2, ll y2) { return pow(x1 - x2, 2) + pow(y1 - y2, 2); }
bool check() {
ll row1 = length(v[0].first, v[0].second, v[1].first, v[1].second);
ll col1 = length(v[0].first, v[0].second, v[2].first, v[2].second);
ll row2 = length(v[2].first, v[2].second, v[3].first, v[3].second);
ll col2 = length(v[3].first, v[3].second, v[1].first, v[1].second);
ll diagona1 = length(v[1].first, v[1].second, v[2].first, v[2].second);
ll diagonal2 = length(v[0].first, v[0].second, v[3].first, v[3].second);
return row1 == row2 && row1 == col1 && row1 == col2 && (row1 + col1) == diagona1 && (row1 + col2) == diagonal2;
}
void solve() {
int x, y;
sort(v.begin(), v.end());
cout << check() << "\n";
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//freopen("input.txt", "r", stdin);
int test;
cin >> test;
while (test--) {
init();
input();
solve();
}
return 0;
}
|
cs |
궁금한점 혹은 모르는점 댓글은 언제든지 환영입니다.
'백준' 카테고리의 다른 글
백준 2531 회전 초밥 (0) | 2021.07.02 |
---|---|
백준 20551 Sort 마스터 배지훈의 후계자 (0) | 2021.07.02 |
백준 1331 나이트 투어 (0) | 2021.07.02 |
백준 2616 소형기관차 (0) | 2021.06.28 |
백준 18352 특정 거리의 도시 찾기 (0) | 2021.06.28 |