728x90
시간 제한 : 2초
메모리 제한 : 128MB
입력
첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (1 ≤ xi ≤ 1,000,000,000)가 한 줄에 하나씩 주어진다.
출력
첫째 줄에 가장 인접한 두 공유기 사이의 최대 거리를 출력한다.
소스코드
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(void) { int n, c, start = 1, mid, end, cnt = 0, ans = 1; cin >> n >> c; vector<int> coord(n); for (int i = 0; i < n; i++) cin >> coord[i]; sort(coord.begin(), coord.end()); end = coord[n - 1] - coord[0]; while (1) { mid = (start + end) / 2; cnt = 1; for (int i = 0; i < n-1; i++) { for (int j = i + 1; j < n; j++) { if (coord[i] + mid > coord[j]) continue; else { i = j - 1; cnt++; break; } } } if (start > end) break; if (cnt >= c) ans = mid, start = mid + 1; else end = mid - 1; } cout << ans; }
Tip
이분 탐색으로 분류되어 있는데, 공유기를 가장 멀리 배치할 수 있는 거리를 이분 탐색하는 것으로 결과가 답이 된다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 2456 - 나는 학급회장이다(한국정보올림피아드:KOI 2011 지역본선) (0) | 2019.01.23 |
---|---|
백준] 10984 - 내 학점을 구해줘(2015 KAIST 5th ACM-ICPC Mock) (0) | 2019.01.22 |
백준] 2615 - 오목(KOI 2003 초등부, ACM-ICPC Regionals) (0) | 2019.01.12 |
백준] 4963 - 섬의 개수(ACM-ICPC Regionals) (0) | 2019.01.06 |
백준] 2573 - 빙산(한국정보올림피아드;KOI 2006 초등부) (0) | 2019.01.06 |