티스토리 뷰
문제에 중요한 명제가 있다.
주어진 $N$개의 점들을 모두 덮는 최소 크기의 정사각형으로, $N$개의 점을 모두 덮을 수 있는 최소 두께의 정사각형 액자를 만들 수 있다.
문제 설명에 따르면 위 명제는 이미 증명된 사실이며, 이 조건 없이 문제를 해결하기는 매우 힘들다.
$w \leq w'$ 일 때, 두께 $w$가 모든 점을 덮으면 두께 $w'$도 모든 점을 덮을 수 있다. 따라서 답을 binary search로 구할 수 있다.
우선, 편의상 $max_x-min_x \leq max_y-min_y$ 라 하자.
그러면 액자의 바깥 정사각형의 한 변 길이 $S = max_y-min_y$ 임과 동시에 액자 위의 y좌표와 아래의 y좌표가 결정된다.
이제 두께 $w$가 답이 될 수 있는지 확인해야한다.
이 때, 여러가지 관점으로 접근할 수 있는데 문제를 풀며 가장 편하다고 느낀 것은 중심의 x좌표를 결정하는 방식이다.
우선 중심의 x좌표를 $X$라 하며 $X$가 될 수 있는 범위는 $[max_x-S/2,min_x+S/2]$이다.
$min_y+w < y_i < max_y-w$ 인 $i$에 대하여, $x_i$들을 정렬한 배열 $A$를 만든다.
액자의 작은 정사각형 한 변 길이는 $S-2w$이다.
두께가 $w$인 액자가 존재하기 위해서 $A_{i+1}-A_i \geq S-2w$ 인 $i$를 찾아야한다.
이 때, 가능한 $X$의 범위를 구해보면, $[A_i+\frac{S-2w}{2},A_{i+1}-\frac{S-2w}{2}]$ 이다.
처음에 구한 $X$의 범위와 $i$에 대한 $X$의 범위 중 공통 범위가 있으면, 두께 $w$는 답이 된다.
처음에 입력받은 좌표에 2를 곱해서 처리하면 double 연산을 할 필요가 없다.
만약 $max_x-min_x > max_y-min_y$ 인 경우 x좌표와 y좌표를 swap 해주면된다.
작은 데이터를 통해 답이 나오는지 확인해볼 수 있다.
'ICPC > 2012 대전' 카테고리의 다른 글
F. Pandora (0) | 2013.10.19 |
---|---|
K. Sports Reporters (4) | 2013.10.19 |
- Total
- Today
- Yesterday
- Segment tree
- IOI2011
- Algorithm
- Parametric Search
- optimization
- Dijkstra
- Tree
- Boyer
- Splay Tree
- moore
- IOI2012
- USACO
- dynamic programming
- IOI2014
- IOI2013
- BOI 2001
- BOI
- vote
- HackerRank
- ioi
- TRIE
- idea
- BOI 2009
- Dynamic Pramming
- Greedy Method
- majority
- Boyer-Moore Majority Vote Algorithm
- Knuth Optimization
- Divide & Conquer
- z-trening
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |