1766 装果子

传送门

#include<cstdio>
#define N 110000
long long n,m,sum=0,ans,max=0;
long long a[N];
void find(long long l,long long r)
{
   if (l>r) return;
   long long mid=(l+r)/2,s=0,k=0;
   for (int i=1;i<=n;i++)
     {
         s+=a[i];
        if (s>mid) k++,s=a[i];
     }
   if (s) k++;
   if (k>m) find(mid+1,r);
     else  ans=mid,find(l,mid-1);             
}
int main()
{
    scanf("%lld%lld",&n,&m);
    /*
       这里又被坑了一下午
       前面n,m定义的long long,读入的时候“%d”整成这玩意。
       以后注意!以后注意!以后注意! 
    */     
    for (int i=1;i<=n;i++)
      {
           scanf("%lld",&a[i]);
           if (a[i]>max) max=a[i];
           sum+=a[i];
      }
    find(max,sum);
    printf("%lld",ans);
    return 0;
        
}
I'm so lost but not afraid ,I've been broken and raise again
原文地址:https://www.cnblogs.com/sjymj/p/5528020.html