原来的代码(#1#2#3#5WA):
#include <iostream>
using namespace std;
int l,r,mid,n,m,ans,a[100003];
bool check(int x){
int s=0,c=0;
for(int i=1;i<=n;i++){
if(s+a[i]<=x) s+=a[i];
else s=a[i],c++;
}
return c<=m;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i],l=l>a[i]?l:a[i],r+=a[i];
while(l<=r){
mid=l+(r-l)/2;
if(check(mid)) ans=mid,r=mid-1;
else l=mid+1;
}
cout<<ans;
return 0;
}
AC代码:
#include <iostream>
using namespace std;
int l,r,mid,n,m,ans,a[100003];
bool check(int x){
int s=0,c=0;
for(int i=1;i<=n;i++){
if(s+a[i]<=x) s+=a[i];
else s=a[i],c++;
}
return c<m;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i],l=l>a[i]?l:a[i],r+=a[i];
while(l<=r){
mid=l+(r-l)/2;
if(check(mid)) ans=mid,r=mid-1;
else l=mid+1;
}
cout<<ans;
return 0;
}
为什么会这样呢?