$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; }
댓글 없음 :
댓글 쓰기