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()