hdu4190 简单二分

2015-01-27 06:24:33 · 作者: · 浏览: 10
题意是

有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
     ; }