89分求助,第4点WA
查看原帖
89分求助,第4点WA
552578
又菜又爱玩楼主2021/12/25 21:12
#include<stdio.h>
#define ll long long
ll a[505],l[505],r[505];
ll m,k,ans=0;
bool check(ll mid)
{
	ll cnt=1,last=0;
	for(ll i=1;i<=m;i++)
	{
		if(a[i]+last>mid)
		{
			cnt++;
			last=a[i];
		}
		else
		{
			last=last+a[i];
		}
	}
	if(cnt>k)
	return 0;
	return 1;
}
int main()
{
	ll sum=0;
	scanf("%lld%lld",&m,&k);
	for(ll i=1;i<=m;i++)
	{
		scanf("%lld",&a[i]);	
		sum=sum+a[i];
	}
	ll low=0;
	ll high=sum;
	while(low<=high)
	{
		ll mid=(low+high)/2;
		if(check(mid))
		{
			ans=mid;
			high=mid-1;
		}
		else
		{
			low=mid+1;
		}
	}
	ll last=0,num=1;
	for(ll i=m;i>=1;i--)
	{
		if(a[i]+last>ans)
		{
			l[num]=i+1;
			num++;
			r[num]=i;
			last=a[i];
		}
		else
		{
			last=last+a[i];
		}
	}
	l[num]=1;
	r[1]=m;
	for(ll i=num;i>=1;i--)
	printf("%lld %lld\n",l[i],r[i]);
	return 0;
}
2021/12/25 21:12
加载中...