社区讨论

30分代码求调(玄关)

P2985[USACO10FEB] Chocolate Eating S参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhjlfa6x
此快照首次捕获于
2025/11/04 04:29
4 个月前
此快照最后确认于
2025/11/04 04:29
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
long long n,d,ans;
struct stu
{
	long long h;
	long long da;
}a[10086];
bool check(long long x)
{
	if(x==0)	return 0;
	long long xfz=0,k=0;
	for(int i=1;i<=d;i++)
	{
		xfz/=2;
		while(xfz<x)
		{
			xfz+=a[++k].h;
			a[k].da=i;
			if(k>n)	return 0;
		}
	}
	return 1;
}
int main()
{
	cin>>n>>d;
	long long l=1,r=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].h;
		r+=a[i].h;
	}
	while(l<=r)
	{
		long long mid=(l+r)/2;
		if(check(mid)==1)
		{
			ans=mid;
			l=mid+1;
		}
		else	r=mid-1;
	}
	cout<<ans<<endl;
	for(int i=1;i<=n;i++)	cout<<a[i].da<<endl;
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...