문제 링크
- http://icpc.me/13307
문제 출처
- 2016 KOI 중등부 4번
사용 알고리즘
- 분할 정복
시간복잡도
- $O(N^2 log N)$
풀이
N개의 파란점과 2N개의 빨간점이 주어질 때, 파란점 1개와 빨간점 2개씩 총 N번 매칭하는 문제입니다.
세 점이 연결된 다음에는 영역이 세 부분으로 나뉘게 되는데, 각 영역에서 파란점과 빨간점의 개수가 1:2를 유지해야 합니다. 그러므로 문제를 풀 때 1:2 비율을 유지하면서 분할 정복을 시도해볼 수 있습니다.
convex hull을 만드는 느낌으로 최외각 점 중 파란색 점을 하나 선택합시다. 최외각에 파란색이 없는 경우는 나중에 생각하고, 일단 파란점이 있는 경우만 생각하겠습니다.
다시 한 번, convex hull을 만드는 느낌으로 선택한 점을 기준으로 잡아서 모든 점들을 각도 순으로 정렬을 해줍니다. 그 다음에 순서대로 점들을 보면서 파란점이면 +2, 빨간점이면 -1을 해줍니다.
0에서 -1로 가는 시점과 -1에서 -2로 가는 시점에서 보는 빨간점들과 연결을 해주면, 연결해준 다음에 나눠지는 모든 영역에서 1:2 비율을 유지합니다. 그러므로 분할정복을 해주면서 부분 문제를 해결해주면 됩니다.
최외각에 파란점이 없는 경우에도 비슷하게 +2, -1을 해주면서, 0이 되는 시점에서 보는 점을 기준으로 두 영역으로 나눠주면 1:2를 유지할 수 있습니다. 단, 이 경우에는 점들을 연결을 하지 않습니다.
전체 코드
1 |
|