사용자 도구

사이트 도구


ps:problems:boj:32863

점과 원

ps
링크acmicpc.net/…
출처BOJ
문제 번호32863
문제명점과 원
레벨골드 3
분류

삼각형의 외접원

시간복잡도O(1)
사용한 언어Python 3.13
제출기록34536KB / 40ms
최고기록32ms
해결날짜2025/03/06

풀이

  • 네 점 P,Q,R,S 중에서 우선 P,Q,R 만 생각하자.
  • 세 점 P,Q,R에 대해서 세 점을 지나는 원을 구하면, 원과 세 점과의 거리는 0으로 같다
  • 원의 중심 O 을 그대로 둔 채 반지름만 바꾸면, 각 점과 원과의 거리는 같게 유지된다.
  • 그러므로, O를 중심으로 하는 원의 반지름을 조절해서 P와의 거리가 S와의 거리와 같게 되도록 하면 된다. 그것은 원이 P와 S의 중점을 지나가도록 하게 하면 찾을수 있다. 즉, 반지름을 (|OP|+|OS|)/2 로 잡으면 된다.
  • P,Q,R을 지나는 원의 중심은 삼각형의 외접원에서 설명한대로 찾을 수 있다.
  • 만약 P,Q,R이 한 직선위에 있는 경우에는 원이 만들어지지 않으므로, 다른 점 세개를 가지고 같은 방법을 시도하면 된다.

코드

"""Solution code for "BOJ 32863. 점과 원".

- Problem link: https://www.acmicpc.net/problem/32863
- Solution link: http://www.teferi.net/ps/problems/boj/32863

Tags: [geometry]
"""

import math
from teflib import geometry


def main():
    P, Q, R, S = [[int(x) for x in input().split()] for _ in range(4)]

    try:
        *O, r_sq = geometry.circumcircle_of_triangle(P, Q, R)
    except geometry.DegeneracyError:
        S, R = R, S
        *O, r_sq = geometry.circumcircle_of_triangle(P, Q, R)

    answer_r = (math.sqrt(r_sq) + math.dist(O, S)) / 2

    print(*O, answer_r)


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
W C I G O
 
ps/problems/boj/32863.txt · 마지막으로 수정됨: 2025/03/06 14:21 저자 teferi