求助!!!大佬帮忙康康这代码第五个点为什么WA了???
查看原帖
求助!!!大佬帮忙康康这代码第五个点为什么WA了???
400593
wuyiduo楼主2021/8/1 21:49
#include<bits/stdc++.h>
using namespace std;
int n,m;
long long a[100010],sum,maxx;
int f(int x){
	int cnt=1;//分的段数 
	long long s=0;//该子段的和 
	for(int i=1;i<=n;i++){
		if(s+a[i]<=x) s+=a[i];//和小于等于x继续添加 
		  else{//否则表示当前段结束,新段开始 
		  	cnt++;
		  	s=a[i];
		  }
	}
	return cnt;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		maxx=max(maxx,a[i]);
		sum+=a[i];
	}
	long long l=maxx,r=sum;//设置答案的上界和下界,分别是最大元素和总和 
	while(l<r){
		long long mid=(l+r)/2;//取中心靠右端点 
		if(f(mid)>m) l=mid+1;//x取得过小分的段数过多,不可能是答案 
		  else r=mid;//可能是答案但也可能有更优解 
	}
	printf("%lld",l);
	return 0;
}
2021/8/1 21:49
加载中...