【题目描述】
把B个气球分给N个城市,使得每个城市竞争这些气球的人最少
【解题思路】
官方解答,二分
#define maxpop 5000000
int a[500000];
int N, B;
bool ok(int x)
{
int c = 0, i;
for (i = 0; i < N && c <= B; ++i)
c += (a[i] + x - 1) / x;
return c <= B;
}
int process()
{
int low = 1, high = maxpop;
while (high - low > 1) {
int mid = (low + high) >> 1;
if (ok(mid)) high = mid;
else low = mid;
}
if (ok(low)) return low;
return high;
}
int main()
{
while (scanf("%d%d", &N, &B) == 2 && (N != -1 || B != -1)) {
int i;
getchar();
char s[100];
for (i = 0; i < N; ++i) {
gets(s);
a[i] = atoi(s);
}
int ans = process();
printf("%d\n", ans);
}
return 0;
}