社区讨论

90分求助

P4181[USACO18JAN] Rental Service S参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@m4urpst0
此快照首次捕获于
2024/12/19 11:34
去年
此快照最后确认于
2024/12/19 11:34
去年
查看原帖
WA了5号测试点,已经下载了,答案是12625206706,我这个程序算出来的是12625206707,检查了好几遍,个人觉得我的这个结果是对的,怀疑测试点给的结果
CPP
#include <bits/stdc++.h>
using namespace std;
void gj(long long *q,long long *p,int k,int n)
{
	long long i,t;
	i=k;
	if(k*2+1<n && p[k*2+1]<p[i])
		i=k*2+1;
	if(k*2+2<n && p[k*2+2]<p[i])
		i=k*2+2;
	if(i!=k)
	{
		t=p[i];
		p[i]=p[k];
		p[k]=t;
		t=q[i];
		q[i]=q[k];
		q[k]=t;
		gj(q,p,i,n);
	}
}
int main()
{
	long long n,m,r,i,j,t,ans=0;
	cin>>n>>m>>r;
	long long c[n],q[m],p[m],a[n],b[r];
	for(i=0;i<n;i++)
		cin>>c[i];
	sort(c,c+n);
	for(i=0;i<m;i++)
	{
		cin>>q[i]>>p[i];
		for(j=i;j>0 && p[j]<p[(j-1)/2];j=(j-1)/2)
		{
			t=p[j];
			p[j]=p[(j-1)/2];
			p[(j-1)/2]=t;
			t=q[j];
			q[j]=q[(j-1)/2];
			q[(j-1)/2]=t;
		}
	}
	for(i=m-1;i>0;i--)
	{
		t=p[i];
		p[i]=p[0];
		p[0]=t;
		t=q[i];
		q[i]=q[0];
		q[0]=t;
		gj(q,p,0,i);
	}
	j=0;
	for(i=n-1;i>=0;i--)
	{
		a[i]=0;
		while(c[i] && j<m)
		{
			if(c[i]>=q[j])
			{
				a[i]+=q[j]*p[j];
				c[i]-=q[j];
				q[j]=0;
				j++;
			}
			else
			{
				a[i]+=c[i]*p[j];
				q[j]-=c[i];
				c[i]=0;
			}
		}
	}
	for(i=0;i<r;i++)
		cin>>b[i];
	sort(b,b+r);
	j=r-1;
	for(i=0;i<n;i++)
		if(a[i]<b[j])
		{
			a[i]=b[j];
			j--;
		}
		else
			break;
	for(i=0;i<n;i++)
		ans+=a[i];
	cout<<ans<<endl;
	return 0;
}

回复

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

正在加载回复...