https://www.acmicpc.net/problem/1004
점과 원사이 관계로 푸는 문제.
출발 지점과 도착 지점이 주어진 원에 대하여 두 점이 모두 원 안쪽에 속하는지, 둘다 속하지 않은 경우 해당 원을 진입하거나 이탈 할 필요가 없습니다.
어느 한 지점만 속한 경우 반드시 진입 또는 이탈을 해야하므로 이 경우에만 1 증가 시켜주면 됩니다.
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int t;
cin >> t;
for (; t--;) {
int sx, sy, dx, dy;
int n;
int ans = 0;
cin >> sx >> sy >> dx >> dy >> n;
for (int i = 0; i < n; i++) {
int x, y, r;
cin >> x >> y >> r;
int cnt = 0;
int dist = (sx - x) * (sx - x) + (sy - y) * (sy - y);
if (dist <= r * r) {
cnt += 1;
}
dist = (dx - x) * (dx - x) + (dy - y) * (dy - y);
if (dist <= r * r) {
cnt += 1;
}
if (cnt == 1) { // 출발 또는 도착 지점 중 한점만 원에 속함
ans += 1;
}
}
cout << ans << "\n";
}
}
반응형
'알고리즘' 카테고리의 다른 글
[BOJ] 백준 1011번: Fly me to the Alpha Centauri (0) | 2020.08.11 |
---|---|
[BOJ] 백준 1007번: 벡터 매칭 (0) | 2020.08.11 |
[BOJ] 백준 1002번: 터렛 (1) | 2020.08.11 |
유니온 파인드 (Union Find) 혹은 분리 집합 (Disjoint Set) (0) | 2020.08.09 |
[BOJ] 백준 1956번: 운동 (0) | 2020.08.09 |