有n个城市,m个投票箱,接下来n个城市人口数,每个投票箱都不能为空,计算最后投票箱的容量必须达到多少,才能满足需要。 每个城市的人必须只能将票投到自己城市分得得投票箱中。要是容量最小箱子必须得都用上
二分枚举所以的人数
#include#include #include using namespace std ; int num [500100 ],n ,m ; int judge (int x ) { int s =0 ; for(int i =1 ;i <=n ;i ++) { s +=num [i ]/x ; if(num [i ]%x !=0 ) s ++;//注意所有人都得投票 } if(s >m ) return 0 ; return 1 ; } int main() { int i ,j ; while(~scanf ("%d%d" ,&n ,&m )) { if(n ==-1 &&m ==-1 ) break; int L =1 ,R =-1 ; for(i =1 ;i <=n ;i ++) { scanf ("%d" ,&num [i ]); if(num [i ]>R ) R =num [i ]; } while(L <R ) { int mid =(L +R )/2 ; if(!judge (mid ))L =mid +1 ; else R =mid ; } printf ("%d\n" ,R ); } return 0 ; }