티스토리 뷰

Algorithm/BOJ

1654 랜선 자르기

henry1214 2018. 2. 12. 00:16

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



이분 탐색으로 정답의 범위를 줄여가면서 랜선의 최대 길이를 찾는다. 랜선의 개수가 모자라면 범위를 내리면서 개수를 늘려가고 랜선의 개수가 원하는 개수보다 같거나 크다면 범위를 최대한 올려가면서 랜선의 최대 길이를 찾는다. 이 때 mid가 정답이 되는 것이 아니라 매번 조건을 만족하는지 확인하면서 정답을 갱신해줘야 한다.



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
#include <cstdio>
 
long long k,n,ans,lc[10000],max;
 
void bs()
{
    long long left=1,right=max,mid;
    while(left<=right)
    {
        mid=(left+right)/2;
        long long sum=0;
        for(int i=0;i<k;i++)
            sum+=lc[i]/mid;
        if(sum<n) right=mid-1;
        else
        {
            if(ans<mid) ans=mid;
            left=mid+1;
        }
    }
}
 
int main()
{
    scanf("%lld %lld",&k,&n);
    for(int i=0;i<k;i++)
    {
        scanf("%lld",&lc[i]);
        if(max<lc[i]) max=lc[i];
    }
    bs();
    printf("%lld\n",ans);
    return 0;
}
cs


'Algorithm > BOJ' 카테고리의 다른 글

4150 피보나치 수  (0) 2018.02.12
3896 소수 사이 수열  (0) 2018.02.12
5355 화성 수학  (0) 2018.02.11
2447 별찍기 - 10  (0) 2018.02.11
1913 달팽이  (0) 2018.02.11
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday