A27738. 采摘苹果秋天到了,国豪家院子里的苹果树结了 n 个果子。国豪准备采摘这些苹果。他有一个 a 厘米高的椅子,当他手够不着时,他会站到椅子上再试试。当然,摘苹果不仅需要能够到,还需要消耗一定的体力值。国豪初始的体力值为 s。如果椅子的高度 a 再加上他手伸直的最大长度 b 大于等于第 i 个苹果的高度 xi,并且国豪目前现有的体力值大于等于摘第 i 个苹果消耗的体力值 yi 时,就认定国豪能够摘到这…
填空题
中等
知识点
题目描述
采摘苹果
秋天到了,国豪家院子里的苹果树结了 n 个果子。国豪准备采摘这些苹果。他有一个 a 厘米高的椅子,当他手够不着时,他会站到椅子上再试试。当然,摘苹果不仅需要能够到,还需要消耗一定的体力值。国豪初始的体力值为 s。如果椅子的高度 a 再加上他手伸直的最大长度 b 大于等于第 i 个苹果的高度 xi,并且国豪目前现有的体力值大于等于摘第 i 个苹果消耗的体力值 yi 时,就认定国豪能够摘到这个苹果。请你编程统计国豪一共能摘到多少个苹果。
输入
共 n+2 行。第 1 行,两个正整数 n 和 s。第 2 行,两个正整数 a 和 b。
接下来的 n 行,每行两个正整数 xi 和 yi。
输出
共一行,一个整数,表示国豪最多能摘到的苹果数。
样例输入
4 10 20 140
150 4
170 2
130 5
155 3
样例输出
2
说明
一共有 4 个苹果。国豪初始的体力值为 10。国豪能摘到苹果的最大高度为 160。第 2 个苹果超过了 160,国豪摘不到。剩下的 3 个苹果,虽然都能摘到,但他的体力值只能保证他摘 2 个。
数据范围
n<=5000,a<=50,b<=200,s<=1000,xi<=280,yi<=100
参考答案
#include<bits/stdc++.h>
using namespace std;
int n,s,a,b,ab,sum;
struct apple
{
int xi,yi;
}t[5001];
bool cmp(apple x,apple y)
{
return x.yi<y.yi;
}
int main()
{
cin>>n>>s>>a>>b;
ab=a+b;
for(int i=1;i<=n;i++)
cin>>t[i].xi>>t[i].yi;
stable_sort(t+1,t+1+n,cmp);
for(int i=1;i<=n;i++)
{ if(t[i].xi<=ab&&t[i].yi<=s)
{
s=s-t[i].yi;
sum++;
}
if(s<=0)
break;
}
cout<<sum;
return 0;
}
上一题
下一题