목차

두 원

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

수학, 기하

시간복잡도O(1)
사용한 언어Python
제출기록32972KB / 68ms
최고기록60ms
해결날짜2022/02/17

풀이

코드

"""Solution code for "BOJ 7869. 두 원".

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

Tags: [Math] [Geometry]
"""

import math


def main():
    x1, y1, r1, x2, y2, r2 = [float(x) for x in input().split()]

    d = math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
    if r1 + r2 <= d:
        answer = 0
    elif d <= abs(r1 - r2):
        answer = math.pi * r1 * r1 if r1 <= r2 else math.pi * r2 * r2
    else:
        theta1 = 2 * math.acos((r1 * r1 + d * d - r2 * r2) / (2 * r1 * d))
        theta2 = 2 * math.acos((r2 * r2 + d * d - r1 * r1) / (2 * r2 * d))
        area1 = r1 * r1 * theta1 / 2 - r1 * r1 * math.sin(theta1) / 2
        area2 = r2 * r2 * theta2 / 2 - r2 * r2 * math.sin(theta2) / 2
        answer = area1 + area2

    print(f'{answer:.3f}')


if __name__ == '__main__':
    main()