rt,上代码:
#include<bits/stdc++.h>
#define int long long
// #define MOD 1000000007
using namespace std;
priority_queue<int,vector<int>,greater<int> >q;
int n,k,m;
struct node{
int x,y;
}a[50005];
bool cmp(node a,node b){
return a.y<b.y;
}
bool cmp2(node a,node b){
return a.x<b.x;
}
bool cmp3(node a,node b){
return a.x-a.y>b.x-b.y;
}
int work2(){
sort(a+1,a+n+1,cmp3);
sort(a+k+1,a+n+1,cmp2);
int ans=0;
for(int i=1;i<=n;i++){
if(i<=k){
m-=a[i].y,ans++;
if(m<0)ans--,m+=a[i].y;
}
else{
m-=a[i].x,ans++;
if(m<0)ans--,m+=a[i].x;
}
}
return ans;
}
signed main(){
cin>>n>>k>>m;
for(int i=1;i<=n;i++)
cin>>a[i].x>>a[i].y;
sort(a+1,a+n+1,cmp);
int sum=0,tot=k;
for(int i=1;i<=k;i++){
sum+=a[i].y;
q.push(a[i].x-a[i].y);
if(sum>m)cout<<i-1,exit(0);
if(i==n)cout<<i,exit(0);
}
sort(a+k+1,a+n+1,cmp2);
for(int i=k+1;i<=n;i++){
int t=INT_MAX;
if(!q.empty())t=q.top();
if(t<a[i].x-a[i].y){
sum+=t;
q.pop();
q.push(a[i].x-a[i].y);
sum+=a[i].y;
}else sum+=a[i].x;
if(sum>m)break;
tot++;
}
cout<<max(tot,work2());
return 0;
}