[BOJ 13202] 피자 배치
문제
https://www.acmicpc.net/problem/13202
풀이
k가 100 이하이므로 피자를 놓을 수 있는 세 방향에서 각각 (k - 1)개씩을 고려한다.
그러면 총 3 * (k - 1) + 1개의 피자 중엔 정답이 있음이 보장된다.
나머지는 수학이다.
보조선을 잘 긋고, 반각 공식을 이용해 닮음비를 구해주면 다음 반지름을 구할 수 있다.
코드
import sys
from math import pi
for _ in range(int(sys.stdin.readline())):
a, b, k = map(int, sys.stdin.readline().split())
c = (a ** 2 + b ** 2) ** 0.5
radius = [(a + b - c) / 2]
r1 = r2 = r3 = radius[0]
rate1 = ((1 - b / c) / 2) ** 0.5
rate2 = ((1 - a / c) / 2) ** 0.5
const1 = (1 - rate1) / (1 + rate1)
const2 = (1 - rate2) / (1 + rate2)
const3 = (2 ** 0.5 - 1) / (2 ** 0.5 + 1)
for __ in range(k - 1):
r1 *= const1
r2 *= const2
r3 *= const3
radius.append(r1)
radius.append(r2)
radius.append(r3)
print(pi * sorted(radius, reverse=True)[k - 1] ** 2)
Leave a comment