- 数列分段 Section II
已a
- 2025-3-13 13:07:38 @
//freopen忘注释了喵
#include<iostream>
#include<cstring>
using namespace std;
#define int long long
int a[1145140];
int n,m;
int mi,s;
bool check(int sum){
int cnt=0,ans=1;
for(int i=0;i<n;i++){
if(cnt+a[i]>sum){
cnt=0;
ans++;
}
cnt+=a[i];
}
if(ans<=m) return 1;
else return 0;
}
int find_sum(int l,int r){
while((l+1)!=r){
int mm=(l+r)/2;
if(!check(mm)){
l=mm;
}
else{
r=mm;
}
}
return r;
}
signed main(){
// freopen("P1182_4.in","r",stdin);
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i];
s+=a[i];
mi=min(mi,a[i]);
}
cout<<find_sum(mi-1,s+1);
return 0;
}
笑点解析:想找最大值歹马写的是找最小值,纯若只
ac代码
#include<iostream>
#include<cstring>
using namespace std;
#define int long long
int a[1145140];
int n,m;
int ma,s;
bool check(int sum){
int cnt=0,ans=1;
for(int i=0;i<n;i++){
if(cnt+a[i]>sum){
cnt=0;
ans++;
}
cnt+=a[i];
}
if(ans<=m) return 1;
else return 0;
}
int find_sum(int l,int r){
while((l+1)!=r){
int mm=(l+r)/2;
if(!check(mm)){
l=mm;
}
else{
r=mm;
}
}
return r;
}
signed main(){
// freopen("P1182_4.in","r",stdin);
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i];
s+=a[i];
ma=max(ma,a[i]);
}
cout<<find_sum(ma-1,s+1);
return 0;
}
1 comments
-
h_h LV 5 MOD @ 2025-3-13 17:10:32
👍👍👍👍👍怎么找出来的,啥数据
- 1
Information
- ID
- 997
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- # Submissions
- 127
- Accepted
- 21
- Uploaded By