我愿意用一楼十年阳寿换点赞过百。
一楼:我呸呸呸
额,这道题很简单,只需要用结构体数组排序,也涉及到了一部分贪心算法。
所以咱们分布来,首先,定义结构体数组:
两个变量我是按拼音来取的,
struct zpg{
int gd;
int lq;
}q[10010];
接下来输入数据
两个数 苹果数 n,力气 k。
两个数 椅子的高度 a
小码君手伸直的最大高度 b。
int n,k;
cin>>n>>k;
int a,b;
cin>>a>>b;
接下来输入结构体数组
for(int i=1;i<=n;i++){
cin>>q[i].gd>>q[i].lq;
}
然后,我们要基于够这个苹果的力气大小进行排序,在固定的所剩力气中,拿的苹果力气所花费的越小,拿到的个数就越多。
所以咱们进行排序:
sort(q+1,q+n+1,cmp);
接下来进行判断并输出
int cnt=0;
for(int i=1;i<=n;i++){
if(a+b>=q[i].gd){
if(k-q[i].lq>=0){
cnt++,k-=q[i].lq;
}
}
}
cout<<cnt;
如果小码君凳子加上手伸直的高度大于或等于苹果高度时,如果成立,那么判断力气是否够用,够用的话才去摘这个苹果,然后用cnt累加器累加摘到苹果数量,最后在输出。
完整代码:
#include<bits/stdc++.h>
using namespace std;
struct zpg{
int gd;
int lq;
}q[10010];
bool cmp(zpg x,zpg y){
return x.lq<y.lq;
}
int main(){
int n,k;
cin>>n>>k;
int a,b;
cin>>a>>b;
for(int i=1;i<=n;i++){
cin>>q[i].gd>>q[i].lq;
}
sort(q+1,q+n+1,cmp);
int cnt=0;
for(int i=1;i<=n;i++){
if(a+b>=q[i].gd){
if(k-q[i].lq>=0){
cnt++,k-=q[i].lq;
}
}
}
cout<<cnt;
return 0;
}
你们要是在冤枉我抄袭我就隔屏幕紫菜你们。。。
大家明白了吗,明白的话不妨点个赞呦!
拜拜喽