https://www.acmicpc.net/problem/1654
1. 분류
이분탐색
2. 풀이
14627번 파닭파닭과 굉장히 유사한 문제이다(http://private-space.tistory.com/11).
파닭파닭 문제에서 조금 변형하여 해결했다.
3. 소스코드
#include <cstdio>
typedef unsigned long long ull;
ull wire[10000];
ull bs(int k, int n, ull max)
{
ull low = 1, high = max, mid = (low + high) / 2;
while (low <= high)
{
int cnt = 0;
for (int i = 0; i < k; i++)
cnt += wire[i] / mid;
if (cnt >= n)
low = mid + 1;
else
high = mid - 1;
mid = (low + high) / 2;
}
return mid;
}
int main()
{
int k, n;
ull max = 0;
scanf("%d %d", &k, &n);
for (int i = 0; i < k; i++)
{
scanf("%llu", &wire[i]);
max = max < wire[i] ? wire[i] : max;
}
printf("%llu\n", bs(k, n, max));
return 0;
}
'알고리즘' 카테고리의 다른 글
| BOJ [1629] 곱셈 (0) | 2017.08.13 |
|---|---|
| BOJ [1780] 종이의 개수 (0) | 2017.08.13 |
| BOJ [14501] 퇴사 (0) | 2017.08.13 |
| BOJ [11561] 징검다리 (0) | 2017.08.13 |
| BOJ [1725] 히스토그램 (0) | 2017.08.12 |