源代码: #include<bits/stdc++.h> using namespace std; long long n,m,a[200005],r,l,mid; int main(){ scanf("%lld%lld",&n,&m); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); a[i]++; r+=a[i]; } while(l+1<r){ mid=(l+r)/2; long long sum=0,t=1; for(int j=1;j<=n;j++){ if(sum+a[j]<=mid){sum+=a[j];} else{ t++; sum=a[j]; } } if(t<=m){ r=mid; } else{ l=mid; } } cout<<r-1; return 0; } 找半天了,终于!!!憾错······

NO!!!!!!!!!!!!!!

one hundred hours later

#include<bits/stdc++.h> using namespace std; long long n,m,a[200005],l,r,mid; int main(){ scanf("%lld%lld",&n,&m); l=0; r=0; for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); l=max(l,a[i]); r+=a[i]+1; } while(l<r){ mid=(l+r)/2; long long sum=0,t=1; for(int j=1;j<=n;j++){ if(sum==0) sum=a[j]; else if(sum+1+a[j]<=mid) sum+=1+a[j]; else t++,sum=a[j]; } if(t<=m)r=mid; else l=mid+1; } cout<<l; return 0; }

1 条评论

  • @ 2026-4-7 17:01:29

    虽然找错的过程可能比较枯燥无聊,但是相信你经过了这一次的找错,下次再遇到类似的问题,就可以比较快速的解决了。成长就是在这样的过程中,一点点积累,有一天可能就会发生质变了。

  • 1

信息

ID
4959
时间
ms
内存
MiB
难度
2
标签
递交数
16
已通过
8
上传者