문제


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