1002번 - 터렛
처음에는 범위안의 모든 값을 구하는 건줄 알았는데
문제를 잘 읽어보니, 반지름과 중심을 이용한 수학문제였다..
중심이 겹칠때, 중심이 겹치지 않을 때 나누면
겹칠때 - 반지름의 합이 중심거리와 같으면 무한대, 아니면 0
안 겹칠 때 - 0개인 경우 -> 아주 멀리 떨어져 있거나, 아주 큰 원이 작은 원을 품고 있거나
- 1개인 경우 -> 중심의 거리와 반지름의 거리가 같을 때, 혹은 아주 큰 원과 작은 원이 내접해서 한점
- 2개인 경우 -> 그 외
<정답 코드>
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 50 51 52 53 | #include<iostream> #include<math.h> using namespace std; double dist(double x1, double y1, double x2, double y2) { return sqrt((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1)); } int main() { ios::sync_with_stdio(false); cin.tie(NULL); //freopen("input.txt", "r", stdin); int tc; cin >> tc; for (int t = 1; t <= tc; t++) { double x1, x2, y1, y2, r1, r2; cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2; double d = dist(x1, y1, x2, y2); if (d == 0) { if (r1 == r2) { cout << "-1\n"; } else { cout << "0\n"; } } else { if (d > r1 + r2 || d < abs(r2 - r1)) { cout << "0\n"; } else if (d == r1 + r2 || d == abs(r2 - r1)) { cout << "1\n"; } else { cout << "2\n"; } } } return 0; } | cs |
반응형