贪心+二分,最大值最小化问题。利用投票箱b的值是一定的,将投票数进行二分,使得算出的投票箱数始终为b。
代码如下:
#include<cstdio>
int city[500001];
int main()
{
int n, b;
while(scanf("%d%d", &n, &b))
{
int Max = 0, l, r, mid;
if(n==-1 && b==-1)
break;
for(int i=0; i<n; i++)
{
scanf("%d", &city[i]);
if(city[i]>Max)
Max = city[i];
}
l=0, r=Max;
while(l<=r)
{
int sum = 0;
mid=(l+r)/2;
for(int i=0; i<n; i++)
{
sum += city[i]/mid;
if(city[i]%mid)
++sum;
}
if(sum>b)
l = mid+1;
else
r = mid-1;
}
printf("%d\n", l);
}
return 0;
}