문제 링크
- https://icpc.me/25060
문제 출처
- 2021-2022 SWERC H번
사용 알고리즘
- 삼분 탐색
시간복잡도
- $O(\log^4 \epsilon)$
풀이
입력으로 주어진 세 점을 $a, b, c$, 새로 찍은 점을 $p$라고 합시다. $\triangle abp, \triangle bcp, \triangle cap$의 페르마 포인트의 비용의 최댓값을 최소화하는 $p$를 구해야 합니다.
일단 세 점이 주어졌을 때 페르마 포인트(세 점으로부터의 거리 합이 최소가 되는 점)을 구하는 방법을 알아봅시다. 거리 함수는 볼록 함수이므로 거리 함수들의 합도 볼록 함수입니다. 따라서 페르마 포인트는 삼분 탐색이나 경사 하강법 등으로 구할 수 있습니다. 정밀도 때문에 경사 하강법 보다는 삼분 탐색 2개를 중첩하는 것이 좋습니다. $O(\log^2 \epsilon)$에 구할 수 있습니다.
이제 실제 $p$의 위치를 구해야 하는데, $p$에 대한 비용도 볼록 함수이므로 $p$도 삼분 탐색으로 구할 수 있습니다. $p$를 찾는 것도 삼분 탐색 2개를 중첩해야 하므로 페르마 포인트를 $O(\log^2 \epsilon)$번 구해야 합니다. 전체 시간 복잡도는 $O(\log^4 \epsilon)$이고, $10^{-4}$ 정도의 정밀도만 요구하므로 생각보다 빠르게 돌아갑니다.
전체 코드
1 |
|