20分求助,有超时和错误
查看原帖
20分求助,有超时和错误
1076502
sicklove楼主2025/7/22 11:55
#include <bits/stdc++.h>
using namespace std;
int a[50050],t[50050];
int n,d;
bool check(int x)
{
	int sum=0,pos=1;
	for(int i=1;i<=d;i++)
	{
		for(int j=pos;j<=n;j++)
		{
			if(sum<x)
			{
				sum+=a[j];
				t[j]=i;
				pos++;
			}
		}
		if(sum<x&&pos>n)
			return false;
		sum/=2;
	}
	return true;
}
int main()
{
	int sum=0,ans=0;
	cin>>n>>d;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sum+=a[i];
	}
	int left=0,right=sum;
	while(left<=right)
	{
		int mid=(left+right)/2;
		if(check(mid))
		{
			left=mid+1;
			ans=mid;
		}
		else right=mid-1;
	}
	cout<<ans<<endl;
	for(int i=1;i<=n;i++)
		cout<<t[i]<<endl;
	return 0;
}
2025/7/22 11:55
加载中...