题意:
给你N个城市每个城市有相应的人口,有B个选票箱,要求每个城市都至少有一个选票箱,且先要使N个城市中得选票箱的票数的最大值最小化。
解题思路:
二分结果,求上界
注意:
无
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define MAXN0 500010
#define MAXN1 5000010
#define r1(x) (x)>>1
int N,B;
int a[MAXN0];
int solve(){
int L = 1,R = MAXN1 - 10;
int Mid;
int sum = 0;
while(L<R){
sum = 0;
Mid = r1(L+R);
for(int i=0;i<N;++i){
sum += (int)ceil(a[i]*1.0/Mid);
if(sum>B)break;
}
if(sum<=B)R = Mid;
else {
L = Mid + 1;
}
}
return L;
}
int main(){
while(scanf("%d%d",&N,&B)!=EOF){
if(N==-1&&B==-1)break;
for(int i=0;i<N;++i){
scanf("%d",&a[i]);
}
int ans = solve();
printf("%d\n",ans);
}
return 0;
}