페이지

1002번: 터렛

https://www.acmicpc.net/problem/1002


$O(t)$

두 개의 원에 의해 생기는 교점에 대해 생각해보자.

두 좌표 사이 거리를 d라고 하자. 각 조건에 따른 교점 수는 다음과 같다.
i) d=0
r1=r2 부정
r1!=r2 불능
ii) d!=0
|r1-r2|<d<|r1+r2| 2개
d=|r1-r2|, |r1+r2| 1개


#include<stdio.h>
int n, x1, y1, x2, y2, r1, r2;
int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d %d %d %d %d %d", &x1, &y1, &r1, &x2, &y2, &r2);
        int t1 = (r1 - r2)*(r1 - r2), t2 = (r1 + r2)*(r1 + r2),
            d = (x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2);
        if (t1 < d && d < t2) puts("2");
        else if (!t1&&!d) puts("-1");
        else if (t1 == d || t2 == d) puts("1");
        else puts("0");
    }
    return 0;
}

댓글 없음 :

댓글 쓰기