93分贪心求助
查看原帖
93分贪心求助
405111
HeHNCu楼主2024/3/24 09:59
#include<map>
#include<set>
#include<queue>
#include<vector> 
#include<iostream>
#include<algorithm>
#define long long int
#define maxn 100000+10
using namespace std;
int N,K,M,P[maxn],C[maxn],ans=0;
bool vis[maxn];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >p,c;
priority_queue<int,vector<int>,greater<int> >d;
signed main(){
	cin>>N>>K>>M;
	for(int i=1,a,b;i<=N;i++){
		cin>>P[i]>>C[i];
		p.push(make_pair(P[i],i));
		c.push(make_pair(C[i],i));
	}
	for(int i=1;i<=K;i++)d.push(0);
	while(!p.empty()){
		pair<int,int> x1=p.top(),x2=c.top();
		if(vis[x1.second]){
			p.pop();
			continue;
		}
		if(vis[x2.second]){
			c.pop();
			continue;
		}
		if(d.top()>x1.first-x2.first){
			M-=x1.first;
			p.pop();
			vis[x1.second]=true;
		}else{
			M-=x2.first+d.top();
			d.pop();
			c.pop();
			vis[x2.second]=true;
			d.push(P[x2.second]-C[x2.second]);
		}
		if(M>=0)ans++;
		else break;
	}
	cout<<ans<<endl;
	return 0;
}
2024/3/24 09:59
加载中...