Hoon222y

[BOJ 2110] 공유기 설치 본문

코딩/BOJ & 알고스팟

[BOJ 2110] 공유기 설치

hoon222y 2017. 6. 18. 16:51

https://www.acmicpc.net/problem/2110


공유기를 c 개 이상 설치하는데 그 간격이 가장 크게 배치하는 방법이다.

이 문제의 경우 핵심은 "답을 x라고 가정할 때 그 답이 가능한가?" 라는 질문에 답을하는것이다.


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include<iostream>
#include<string>
#include<stdio.h>
#include<algorithm>
#include<utility>
#include<vector>
#include<cstring>
#include<queue>
#include<cmath>
#include<math.h>
 
using namespace std;
 
int n,c;
int main(){
    scanf("%d%d" , &n,&c);
    vector<int > v(n);
    for(int i=0;i<n;i++){
        scanf("%d" , &v[i]);
    }
    sort(v.begin(),v.end());
    
    int left = 1;
    int right = 1000000000;
    int ans=1;
    
    while(left<=right){
        int mid = (left+right)/2;
        int cnt = 1;
        int pos = 0;
        for(int i=0;i<n;i++){
            if(v[i]-v[pos]>=mid){
                pos = i;
                cnt++;
            }
        }
        if(cnt>=c){
            if (ans < mid) {
                ans = mid;
            }
            left = mid+1;
        }else{
            right = mid-1;
        }
    }
    printf("%d\n" ,ans);
}
cs


mid가 답이 될수 있는 값이라고 가정을 한다. 그리고 이분탐색을 계속 하는것인데 그 때 답인 ans보다 mid가 클 경우 mid가 새로운 ans 가 된다.



'코딩 > BOJ & 알고스팟' 카테고리의 다른 글

[codeforce #419] B - Karen and Coffee  (0) 2017.06.18
[BOJ 12869] 뮤탈리스크  (0) 2017.06.18
[BOJ 9466] 텀 프로젝트  (0) 2017.06.18
[BOJ 1300] K번째 수  (0) 2017.06.15
[BOJ 1194] 달이 차오른다, 가자.  (1) 2017.06.15
Comments