20分求助!

P1478 陶陶摘苹果(升级版)

QYZ2011 @ 2023-04-01 22:17:02

只蒙对了一个点


by QYZ2011 @ 2023-04-01 22:32:52

尝试改之后分数没变,但有个点从wa到re了


by CWB0506 @ 2023-04-02 13:05:27

代码发一下


by CWB0506 @ 2023-04-02 13:08:38

我看得到


by CWB0506 @ 2023-04-02 13:10:13

你会结构体吗


by QYZ2011 @ 2023-05-01 14:32:36

@CWB0506 会


by CWB0506 @ 2023-05-01 14:49:22

会用结构体写吗


by CWB0506 @ 2023-05-01 15:10:56

给你看一下代码 注释见代码

//本题主旨:手的长度加上凳子的高度还够不到的苹果就不用考虑,接下来想要摘到的苹果最多那就要摘用的力气最小的苹果,最后判一下力气是否用完了(即是否还可以摘苹果)
//代码思路:
//用结构体输入( 利于排序和利于判断是否可以摘到(就是高度够不够)用flag维护)
//排序 
//摘力气小的苹果,高度不够的不能摘,flag的作用在这,最后看一下力气是否用完 
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,s,a,b;
ll h,ans;
struct sd{
    int x,y;
    bool flag;
}nf[5005];
bool cmp(sd a,sd b){
    return a.y<b.y;
}//排序规则 
int main(){
    cin>>n>>s>>a>>b;
    h=a+b;
    for(int i=1;i<=n;i++){
        cin>>nf[i].x>>nf[i].y;
        if(nf[i].x>h) nf[i].flag=0;
        else nf[i].flag=1;//高度够不够 
    }
    sort(nf+1,nf+n+1,cmp);//结构体排序 
    for(int i=1;i<=n;i++){
        if(nf[i].flag==1&&nf[i].y<=s){
            ans++;
            s-=nf[i].y;
        }
        else if(nf[i].y>s){
            break;
        }//力气还够不够 
    }
    cout<<ans;
    return 0;
}

|