728x90
반응형

터렛에서는 ** 0.5를 해서 제곱근을 구했었는데, 보기 좋게 math 라이브러리를 사용하기로 했다.

행성계와 시작, 행성계와 끝의 거리를 구하고 행성계의 반지름과 비교하면 된다.

행성계와 시작 사이의 거리를 d1, 행성계와 끝 사이의 거리를 d2, 행성계의 반지름을 r이라 하자.

d1, d2 둘 다 r 보다 작으면 행성계는 시작과 끝 둘 다 포함하지 못해서 경로에 포함되지 않고

반대로 d1, d2 둘 다 r 보다 크면 행성계가 시작과 끝 둘 다 포함하기 때문에 경로에 포함되지 않는다.

결국 행성계 안에 시작과 끝 지점 둘 중 하나만 속해 있다면 경로에 포함된다는 것이다.

# ^는 xor 비트 연산자이다.

from math import sqrt

for _ in range(int(input())):
    x1, y1, x2, y2 = map(int, input().split())
    s, e = [x1, y1], [x2, y2]
    ans = 0
    for i in range(int(input())):
        x, y, r = map(int, input().split())
        d1 = sqrt((x-x1)**2 + (y-y1)**2)
        d2 = sqrt((x-x2)**2 + (y-y2)**2)
        if (d1 < r) ^ (d2 < r):
            ans += 1
    print(ans)

728x90
반응형

+ Recent posts