一、题目回顾
- 题目网址:陶陶摘苹果(升级版) - 洛谷
题目描述
又是一年秋季时,陶陶家的苹果树结了 n 个果子。陶陶又跑去摘苹果,这次他有一个 a 公分的椅子。当他手够不着时,他会站到椅子上再试试。
这次与 NOIp2005 普及组第一题不同的是:陶陶之前搬凳子,力气只剩下 s了。当然,每次摘苹果时都要用一定的力气。陶陶想知道在 s<0 之前最多能摘到多少个苹果。
现在已知 n 个苹果到达地上的高度
,椅子的高度 a,陶陶手伸直的最大长度 b,陶陶所剩的力气 s,陶陶摘一个苹果需要的力气
,求陶陶最多能摘到多少个苹果。
输入格式
第 11 行:两个数 苹果数 n,力气 s。
第 22 行:两个数 椅子的高度 a,陶陶手伸直的最大长度 b。
第 33 行~第 3+n-13+n−1 行:每行两个数 苹果高度
,摘这个苹果需要的力气
。
输出格式
只有一个整数,表示陶陶最多能摘到的苹果数。
二、代码与思路
#include<bits/stdc++.h>//万能头文件
using namespace std;
struct cat
{
int a;//高度
int s;//消耗的体力
};//创建结构体cat
bool cmp(cat f1,cat f2)
{
return f1.s<f2.s;
}//sort从小到大排序函数
int main()
{
ios::sync_with_stdio(false);//cin、cout输入输出加速
cin.tie(NULL), cout.tie(NULL);//cin、cout输入输出加速
int n,a,s,b,ans;//定义
cin>>n>>s>>a>>b;//输入苹果数、力气、椅子的高度、陶陶手伸直的最大长度
cat arr[n];//定义结构体数组
a=a+b;//算出陶陶和椅子的高度
for(int i=0;i<n;i++)
{
cin>>arr[i].a>>arr[i].s;
}//输入每个苹果消耗的体力和高度
sort(arr,arr+n,cmp);//排序
for(int i=0;i<n;i++)
{
if(arr[i].s<=s&&arr[i].a<=a)//判断是否有足够的体力去摘苹果,是否够得到(一定要是<=)
{
s=s-arr[i].s;//减去摘苹果消耗的体力
ans++;//能摘得苹果数量加一
}
}
cout<<ans;//输出能摘得苹果数量
return 0;//完美结束
}