89pts,提交8次QwQ求调
查看原帖
89pts,提交8次QwQ求调
542344
consider_hostoj楼主2023/10/15 10:56
#include<bits/stdc++.h>
using namespace std;
long long int a[501],sum,ans;
int n,k;
bool check(int x){
	int t=k;
	long long int res=0;
	for(int i=n;i>=1;i--){
		res+=a[i];
		if(res==x){
			res=0;t--;
		}else if(res>x){
			res=a[i];t--;
		}
		
		if(t<=0) return false;
	}
	return true;
}
int divi(int x,int y){
	long long int l=x,r=y;
	while(l<=r){
		long long int mid=(l+r)/2;
		if(!check(mid)) l=mid+1;
		else r=mid-1;
	}
	return l;
}
int main(){
	cin>>n>>k;
	deque<long long int> d;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sum+=a[i];
	}
	int mid=divi(0,sum),beg=n,end=n;
//	printf("mid=%d\n",mid);
	for(int i=n;i>=1;i--){
		ans+=a[i];
		beg--;
		if(ans>mid){
			ans=a[i];
			d.push_front(end);
			d.push_front(beg+2);
			if(!d.empty()&&d[1]==d[2]) d[1]--;
			end=beg+2;
		}
	}
	if(d[0]>n||d[0]<1) d[0]=2;
	printf("%d %d\n",1,d[0]-1);
	for(int i=0;i<d.size();i++){
		if(i%2==0) printf("%d ",d[i]);
		else printf("%d\n",d[i]);
	}
} 
2023/10/15 10:56
加载中...