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 ;
}
View Code

相关文章:

  • 2022-02-23
  • 2021-11-19
  • 2021-06-07
  • 2022-12-23
  • 2021-12-05
  • 2021-12-26
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-23
  • 2022-12-23
  • 2021-04-27
  • 2021-10-31
  • 2022-12-23
相关资源
相似解决方案