-
[백준 1004] 어린 왕자PS/C++ 2024. 7. 5.
https://www.acmicpc.net/problem/1004
원의방정식을 이용해 시작점 및 도착점이 원의 내부인지 외부인지 판별하는 문제이다.
시작점 및 도착점이 모두 한 원 안에 있는 경우만 조심하면 된다.
원의 정의는 어느 한 점으로부터 거리가 같은 점들의 집합이며 기본적인 원의 방정식은 피타고라스 정리에 의해
x² + y² = r²
로 표현할 수 있다.
문제에서 중심의 좌표가 주어지니 x, y좌표를 그대로 이동하면 된다.
그러면 식이
(x - x1)² + (y - y1)² = r²
처럼 될 것이며, 여기서 x, y가 원의 기준점으로 생각하고 x1, y1은 시작/도착점으로 계산하면 된다.
그러면 아래 식을 만족하면 주어진 점이 해당 원 내부에 있는지, 외부에 있는지 체크할 수 있다
(x - x1)² + (y - y1)² < r²
시작점 또는 도착점 중 하나만 만족하는 경우(a ^ b)에만 정답에 1씩 더한다
#include <bits/stdc++.h> #define FASTIO ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); using namespace std; bool get_inner(int cx, int cy, int r, int tx, int ty); int main() { FASTIO int T; cin >> T; while(T-->0) { int sx, sy, ex, ey; cin >> sx >> sy >> ex >> ey; int n; cin >> n; int res = 0; for(int i = 0; i < n; i++) { int cx, cy, r; cin >> cx >> cy >> r; bool gs = get_inner(cx, cy, r, sx, sy); bool ge = get_inner(cx, cy, r, ex, ey); res += gs ^ ge ? 1 : 0; } cout << res << '\n'; } } bool get_inner(int cx, int cy, int r, int tx, int ty) { return (cx - tx) * (cx - tx) + (cy - ty) * (cy - ty) < r * r; }
'PS > C++' 카테고리의 다른 글
[백준 2529] 부등호 (0) 2024.07.18 [백준 2470] 두 용액( + 2467번) (0) 2024.07.10 [백준 1707] 이분 그래프 (0) 2024.07.04 [백준 9375] 패션왕 신해빈 (0) 2024.07.02 [백준 2108] 통계학 (1) 2024.06.25