http://acm.hdu.edu.cn/showproblem.php?pid=4190
二分答案
#include <iostream> using namespace std ; int a[500005] ; int main() { int n,b ; while(~scanf("%d%d",&n,&b),n!=-1) { int maxn=-1 ; for(int i=0 ;i<n ;i++) { scanf("%d",&a[i]) ; maxn=max(maxn,a[i]) ; } int left,right,mid ; left=1,right=maxn ; int ans ; while(left<=right) { mid=(left+right)>>1 ; int sum=0 ; for(int i=0 ;i<n ;i++) { sum+=a[i]/mid ; if(a[i]%mid) sum++ ; } if(sum>b) left=mid+1 ; else { ans=mid ; right=mid-1 ; } } printf("%d\n",ans) ; } return 0 ; }