DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

Minimum Perimeter Triangle

問題に戻る

解説

점들을 xxx좌표 순서로 정렬하고 분할 정복을 적용한다.

현재 점 집합을 왼쪽 절반과 오른쪽 절반으로 나눈 뒤, 각 절반에서 최소 둘레를 재귀적으로 구한다. 두 값의 최솟값을 δ\deltaδ라 하자. 이제 양쪽 절반의 점을 모두 사용하는 삼각형 중 둘레가 δ\deltaδ보다 작은 것이 있는지만 확인하면 된다.

둘레가 δ\deltaδ보다 작은 삼각형의 모든 변의 길이는 δ2\frac{\delta}{2}2δ​보다 작다. 한 변의 길이를 aaa, 나머지 두 변의 길이를 b,cb,cb,c라 하면 세 점이 한 직선 위에 있지 않으므로

a<b+ca<b+ca<b+c

이고, 따라서

2a<a+b+c<δ2a<a+b+c<\delta2a<a+b+c<δ

이다.

양쪽 절반의 점을 모두 사용하는 삼각형을 생각하자. 서로 다른 절반에 속한 두 꼭짓점의 거리가 δ2\frac{\delta}{2}2δ​보다 작으므로, 세 꼭짓점은 모두 분할선으로부터 수평 거리 δ2\frac{\delta}{2}2δ​ 미만인 띠 안에 있다. 또한 모든 변의 길이가 보다 작으므로 세 꼭짓점의 좌표 범위도 보다 작다.

따라서 분할선 주변의 띠에 속한 점들을 yyy좌표 순서로 정렬하고, yyy좌표 차이가 δ2\frac{\delta}{2}2δ​보다 작은 점들끼리만 확인하면 된다.

이 범위에 들어오는 점의 개수는 상수이다. 띠 안에서 높이가 δ2\frac{\delta}{2}2δ​인 임의의 수평 구간을 생각한다. 분할선의 왼쪽과 오른쪽은 각각 너비와 높이가 모두 δ2\frac{\delta}{2}2δ​ 이하인 직사각형이다.

각 직사각형을 가로로 222등분하고 세로로 333등분한다. 작은 직사각형 하나의 너비는 δ4\frac{\delta}{4}4δ​, 높이는 δ6\frac{\delta}{6}이므로 대각선 길이는

(δ4)2+(δ6)2=1312δ\sqrt{\left(\frac{\delta}{4}\right)^2+\left(\frac{\delta}{6}\right)^2} = \frac{\sqrt{13}}{12}\delta(4δ​)2+

이다.

같은 작은 직사각형 안에 같은 재귀 절반에 속하는 점이 세 개 있다면, 그 세 점으로 만든 삼각형의 둘레는

3⋅1312δ=134δ<δ3\cdot\frac{\sqrt{13}}{12}\delta = \frac{\sqrt{13}}4\delta <\delta3⋅1213​​

이다. 이는 해당 재귀 절반에서 구한 최소 둘레가 δ\deltaδ 이상이라는 사실에 모순이다.

따라서 작은 직사각형마다 점은 최대 두 개이다. 한쪽에는 작은 직사각형이 666개 있으므로 최대 121212개, 양쪽을 합치면 최대 242424개의 점만 존재한다.

결국 띠의 점들을 yyy좌표 순서로 보면서, 각 점 뒤의 상수 개 점으로 만들 수 있는 모든 삼각형을 확인하면 된다. 세 점이 모두 같은 재귀 절반에 속하면 이미 재귀 호출에서 확인했으므로 생략한다.

구현에서는 둘레를 직접 계산하기 전에 세 변의 제곱거리가 모두 (δ2)2\left(\frac{\delta}{2}\right)^2(2δ​)2보다 작은지 먼저 검사한다. 이 조건을 통과한 경우에만 제곱근을 계산하면 상수를 크게 줄일 수 있다.

각 재귀 단계에서 두 절반의 yyy좌표 정렬 결과를 선형 시간에 병합한다. 따라서 전체 시간 복잡도는

O(Nlog⁡N)O(N\log N)O(NlogN)

이고, 공간 복잡도는 O(N)O(N)O(N)이다.

Solution written by GPT5.6

δ2\frac{\delta}{2}2δ​
yyy
δ2\frac{\delta}{2}2δ​
6δ​
(6δ​)2
​
=
1213​​δ
δ
=
413​​δ<
δ