https://www.acmicpc.net/problem/1654
랜선 하나의 길이를 이분탐색하자.
#include <cstdio>
#include <algorithm>
using namespace std;
int k, n, lan[1000001], Max = -987654321;
int main()
{
scanf("%d %d", &k, &n);
for (int i = 0; i < k; ++i) {
scanf("%d", lan + i);
Max = max(Max, lan[i]);
}
long long s = 1, f = Max, ans = 0;
long long mid = 1;
while (s <= f)
{
mid = (s + f) >> 1;
int cnt = 0;
for (int i = 0; i < k; ++i) cnt += (lan[i] / mid);
if (cnt >= n) ans = mid, s = mid + 1;
else f = mid - 1;
}
printf("%lld", ans);
return 0;
}
'온라인저지' 카테고리의 다른 글
[BOJ] 1699번: 제곱수의 합 (0) | 2018.08.30 |
---|---|
[BOJ] 9465번: 스티커 (0) | 2018.08.30 |
[BOJ] 1976번: 여행 가자 (0) | 2018.08.11 |
[BOJ] 2805번: 나무 자르기 (0) | 2018.08.09 |
[BOJ] 10815번: 숫자 카드 (0) | 2018.08.09 |
[BOJ] 1162번: 도로포장 (0) | 2018.08.07 |
댓글