蒟蒻10分求助!
查看原帖
蒟蒻10分求助!
1251930
ALANYQ楼主2024/3/31 14:12
#include<bits/stdc++.h> 
using namespace std;
long long n,m,r,a[100010],c[100010],mon[100010],ans,num=1,sum,tmp=1,d;
struct s
{
	long long p,l;
}b[100010];
bool cmp1(int x,int y){return x>y;}
bool cmp2(s d1,s d2){return d1.p>d2.p;}
int main()
{
	cin >> n >> m >> r;
	d=n;
	for (int i=1;i<=n;i++) cin >> a[i];
	for (int i=1;i<=m;i++) cin >> b[i].l >> b[i].p;
	for (int i=1;i<=r;i++) cin >> c[i];
	sort(a+1,a+n+1,cmp1);
	sort(b+1,b+m+1,cmp2);
	sort(c+1,c+r+1,cmp1);
	for (int i=1;i<=n;i++)
	{
		if (d<=i)
		{
			if (mon[d]<c[tmp])
			{
				mon[d]=c[tmp];
				d--;
				tmp++;
			}
			continue;
		}
		sum=0;
		if (num>m) break;
		while (a[i])
		{
			if (a[i]>b[num].l)
			{
				sum+=b[num].l*b[num].p;
				a[i]-=b[num].l;
				b[num].l=0;
				num++;
			}
			else
			{
				sum+=a[i]*b[num].p;
				b[num].l-=a[i];
				a[i]=0;
				break;
			}
		}
		mon[i]=sum;
		if (tmp<=r)
		{
			long long f=0,j=tmp,t=0,minn=1e18;
			for (;j<=r;j++)
			{
				if (sum<c[j])
				{
					f=1;
					break;
				}
			}
			if (f)
			{
				mon[d]=c[tmp];
				tmp++;
				d--;
			}
		}
	}
	for (int i=1;i<=n;i++) ans+=mon[i];
	cout << ans;
	return 0;
}

就对了第一个测试点,其余全错 QWQ

2024/3/31 14:12
加载中...