求助,大佬帮忙看看哪儿错了,80分,谢谢!
查看原帖
求助,大佬帮忙看看哪儿错了,80分,谢谢!
157147
ljh6jz楼主2020/8/9 18:44
#include<cstdio>
#include<algorithm>
using namespace std;

const int N=100100;

int n,m,a[N],l,r,mid,num,sum,ans=99999999;

int read();

void pre(){
	for(int i=2;i<=n;++i){
		a[i]+=a[i-1];
	}
	return;
}

int main(){
	n=read();
	m=read();
	for(int i=1;i<=n;++i){
		a[i]=read();
	}
//	pre();
	l=0;
	r=9999999;
	while(l<=r){
		num=0;
		mid=(l+r)>>1;
		sum=0;
		for(int i=1;i<=n;++i){
			if(a[i]>mid){
				num=110000;
				break;
			}
			if(a[i]+sum>mid){
				++num;
				sum=a[i];
			}
			else{
				sum+=a[i];
			}
		}
   		if(sum!=0)++num;
		if(num<=m){
			ans=min(ans,mid);
			r=mid-1;
		}
		else{
			l=mid+1;
		}
	}
	printf("%d",ans);
	return 0;
}

int read(){
	int h=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		h=h*10+ch-'0';
		ch=getchar();
	}
	return h;
}

2020/8/9 18:44
加载中...