0分求调

P1182 数列分段 Section II

@[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


|