코드
import sys
input = sys.stdin.readline
for _ in range(int(input())):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
dist = ((x2-x1)**2 + (y2-y1)**2)**(1/2)
maxv, minv = float(max(r1, r2)), float(min(r1, r2))
sum = maxv + minv
if x1 == x2 and y1 == y2 and r1 == r2:
print(-1)
elif maxv > dist + minv:
print(0)
elif maxv == dist + minv and dist > 0:
print(1)
elif dist < sum:
print(2)
elif dist == sum:
print(1)
elif dist > sum:
print(0)
결과
풀이 방법
- 두 사람의 좌표에서
반지름이 각각 r1, r2인 원을 그렸을 때 교차점의 개수
를 찾는 문제이다
- 두 사람의 좌표가 같고 r1 == r2 인 경우: 무한대
- max(r1, r2) > 두 사람 간 거리 + min(r1, r2) 인 경우: 0개
- max(r1, r2) == 두 사람 간 거리 + min(r1, r2) 이고 두 사람 간 거리 > 0 인 경우: 1개
- 이외에,
- 두 사람 간의 거리 < r1 + r2 인 경우: 2개
- 두 사람 간의 거리 == r1 + r2 인 경우: 1개
- 두 사람 간의 거리 > r1 + r2 인 경우: 0개