求hack
查看原帖
求hack
848964
hzoi_Shadow楼主2023/5/1 15:20
#include<bits/stdc++.h>
using namespace std;
priority_queue<pair<long long int,long long int>>moneyp,moneyc;
priority_queue<long long int>moneycha;
long long int p[50001],c[50001],dis[50001];
int main()
{
	long long int n,k,m,i,xp,yp,xc,yc,ans=0,sum=0;
	cin>>n>>k>>m;
	for(i=1;i<=n;i++)
	{
		cin>>p[i]>>c[i];
		moneyp.push({-p[i],i});
		moneyc.push({-c[i],i});
	}
	for(i=1;i<=k;i++)
	{
		moneycha.push(0);
	}
	while(moneyp.size()>0)
	{
		xp=-moneyp.top().first;
		yp=moneyp.top().second;
		xc=-moneyc.top().first;
		yc=moneyc.top().second;
		if(dis[yp]==1)
		{
			moneyp.pop();
		}
		else
		{
			if(dis[yc]==1)
			{
				moneyc.pop();
			}
			else
			{
				if(xp<xc-moneycha.top())
				{
					if(sum+xp>m)
					{
						break;
					}
					sum+=xp;
					ans++;
					moneyp.pop();
					dis[yp]=1;
				}
				else
				{
					if(sum+xc-moneycha.top()>m)
					{
						break;
					}
					sum+=xc-moneycha.top();
					ans++;
					moneyc.pop();
					dis[yc]=1;
					moneycha.pop();
					moneycha.push(-(p[yc]-c[yc]));
				}
			}
		}
	}
	cout<<ans;
	return 0;
}
2023/5/1 15:20
加载中...