티스토리 뷰
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 |