很神奇,我这份二分代码在开 O2 的情况下会随机得分随机过点。
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100010],ans=0;
int main(){
cin>>n>>m;
int l,r;
for(int i=1;i<=n;i++){
cin>>a[i];
l=max(l,a[i]);
r+=a[i];
}
while(l<=r){
int mid=(l+r)>>1,tt=1,pd=0;
for(int i=1;i<=n;i++){
if(pd+a[i]>mid){
pd=0;
tt++;
}
pd+=a[i];
}
if(tt<=m){
ans=mid;
r=mid-1;
}
else l=mid+1;
}
cout<<ans<<endl;
return 0;
}
但是不开 O2 就 A 了,很神奇。