BOJ 1002 터렛

Link

(x1, y1), (x2, y2)를 중심으로 하는 각 반지름의 길이가 r1, r2인 두 원의 교점의 개수를 구하는 문제입니다.

원의 중심간의 거리는 아래와 같습니다.

$\sqrt{(x_1-x_2)^2 + (y_1-y_2)^2}$

우선 각 원의 중심이 같을 때의 처리를 해줍시다.

반지름 비교결과
$r_1 = r_2$-1
$r_1 \ne r_1$0

다음은 그 외 경우의 처리입니다.

교점의 개수조건
2개$(r_1+r_2) > i > \vert(r_1-r_2)\vert$
1개$(r_1+r_2) = i$
0개$(r_1+r_2) < i$

코드 (C++)

#include <cstdio>
#include <cmath>

int main(int argc, char const *argv[]) {
int x1, x2, r1, r2, y1, y2, T;
scanf("%d", &T);
for (int i = 1; i <= T; i++) {
scanf("%d %d %d %d %d %d", &x1, &y1, &r1, &x2, &y2, &r2);
if (x1 == x2 && y1 == y2) {
if (r1 == r2) {
printf("-1\n");
} else {
printf("0\n");
}
} else {
if (r1 < r2) {
int tmp = r2;
r2 = r1;
r1 = tmp;
}
double d = sqrt((pow(x1 - x2, 2) + pow(y1 - y2, 2)));
if (d > r1 - r2 && d < r1 + r2) {
printf("2\n");
} else if (d == r1 + r2 || d == r1 - r2) {
printf("1\n");
} else {
printf("0\n");
}
}
}
return 0;
}
Total views

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×