40分求调
查看原帖
40分求调
959924
VelGutN楼主2025/6/24 22:30

40分不知道哪里出了问题,求大佬指点

#include <iostream>
using namespace std;
long long le=1,re=0,ans=1e18;
long long a[100005];
int l,k;
int f(long long x){
	long long sum=0;
	long long ki=0;
	for(int i=1;i<=l;i++){
		sum+=a[i];
		if(sum<0)sum=0;
		if(sum>=x){
			ki++;
			sum=0;
		}
		if(ki>k)return 2;//n大了 
	}
	if(ki<k)return 0;//n小了 
	return 1;
}
int main(){
	
	cin>>l>>k;
	for(int i=1;i<=l;i++){
		cin>>a[i];
		re=max(re,a[i]);
	}
	le=1;int t=re;
	while(le<=re){
		long long mid=(le+re)/2;
		if(f(mid)==2){
			 le=mid+1;
		}else if(f(mid)==0){
			re=mid-1;
		}else{
			ans=min(ans,mid);
			re=mid-1;
		}
		
//		cout<<ans<<" ";
//		cout<<mid<<"*";
	}
	if(ans==1e18){
		cout<<-1;return 0;
	}
	cout<<ans<<" ";
	ans=0;
	le=1;re=t;
	while(le<=re){
		long long mid=(le+re)/2;
		if(f(mid)==2){
			le=mid+1;
		}else if(f(mid)==0){
			re=mid-1; 
		}else{
			ans=max(ans,mid);
			le=mid+1;
		}
	}
	cout<<ans;
	return 0;
}
2025/6/24 22:30
加载中...