ccf csp 2023 03-2垦田计划
使用一次排序和指示指针即可
C++ 100分示例
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int a;
int b;
};
int min(int a, int b){
if(a<b)return a;
return b;
}
bool compare(node a,node b){
if(a.a>b.a)return true;
return false;
}
int main(){
int n,m,k;
cin>>n>>m>>k;
node zhi[n];
for(int i = 0;i < n;i++){
cin>>zhi[i].a>>zhi[i].b;
}
sort(zhi,zhi+n,compare);
int flag = 0;
while(zhi[flag].a == zhi[flag+1].a){
zhi[flag+1].b += zhi[flag].b;
flag++;
}
while(m>zhi[flag].b && zhi[flag].a>k){
m -= zhi[flag].b;
zhi[flag].a --;
while(zhi[flag].a == zhi[flag+1].a){
zhi[flag+1].b += zhi[flag].b;
flag++;
}
}
cout<<zhi[flag].a;
return 0;
}