@[Su_mmer_nshine](/user/969221) 你的 check 和二分都有问题。
```cpp
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[1000010],l=1,r=2e9,mid;
int check(int x){
int cnt=1,sum=0;
for(int i=1;i<=n;i++){
if(sum+a[i]>x){
sum=a[i];
cnt++;
}
else sum+=a[i];
if(cnt>m||sum >x) return 0;
}
return 1;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
while(l+1<r-1){
mid=l+(r-l)/2;
if(check(mid)) r=mid-1;
else l=mid+1;
}
cout<<l;
return 0;
}
```
有看不懂的地方可以玩问我
by 红黑树 @ 2024-02-06 18:49:09
@[红黑树](/user/413140) 我已经看懂并理解了,谢谢大佬!
已关。
by Su_mmer_nshine @ 2024-02-07 17:28:02
@[红黑树](/user/413140) 只有80分。第一个点WA了。
by Su_mmer_nshine @ 2024-02-07 17:32:50
诶我草我贴错代码了
```cpp
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[1000010],l=1,r=2e9,mid;
int check(int x){
int cnt=1,sum=0;
for(int i=1;i<=n;i++){
if(sum+a[i]>x){
sum=a[i];
cnt++;
}
else sum+=a[i];
if(cnt>m||sum >x) return 0;
}
return 1;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
while(l<=r){
mid=(r+l)/2;
if(check(mid)) r=mid-1;
else l=mid+1;
}
cout<<l;
return 0;
}
```
80 分是二分的问题。你可以上 OIwiki 看看二分是怎么写的。
by 红黑树 @ 2024-02-07 19:22:34
https://oi-wiki.org/basic/binary/
by 红黑树 @ 2024-02-07 19:24:01
@[红黑树](/user/413140) 谢谢。祝你新春愉快!
by Su_mmer_nshine @ 2024-02-13 13:04:36