第四点求助,已经以最大值作为左边界了
查看原帖
第四点求助,已经以最大值作为左边界了
692458
z21371173楼主2022/4/2 09:49
#include<stdio.h>
int tree[1000000],n,m;
int check(int a){
	long long int len=0,ans=0;
	for(int i=0;i<n;i++){
		len+=tree[i];//加上当前长度 
		
		if(len==a)//等于目标长度 
		{
			ans++;
			len=0;
		}
		else if(i<n-1&&len<a&&len+tree[i+1]>a)//i+1<n时, 
		{
			ans++;
			len=0;
		}
		else if(i==n-1){
			ans++;
		} 
	}
	if(ans==m)
	return 2;
	else if(ans<m)
	return 1;
	else return 0;
}
int main(){
	int i;
	int left=0,mid,right=0,ans;
	scanf("%d%d",&n,&m);
	for(i=0;i<n;i++){
		scanf("%d",&tree[i]);
		right+=tree[i];
		if(tree[i]>left)
		left=tree[i];
	}
	while(left<=right){
		mid=(left+right)/2;
		int temp1,temp2;
		temp1=check(mid);
		temp2=check(mid-1);
		if(temp1==2&&temp2==0)
		{
			ans=mid;
			break;
		} 
		 else if(temp1==2&&temp2==2){
		 	ans=mid-1;
		 	right=mid-1;
		 }
		else if(temp1==0)
		left=mid+1;
		else if(temp1==1)
		right=mid-1;
	}
	printf("%d",ans);
} 
2022/4/2 09:49
加载中...