60分求助

P1478 陶陶摘苹果(升级版)

X2H_tato @ 2020-12-22 20:01:51

#include <iostream>
#include <algorithm>
using namespace std;
int n,s;
int m,b;
struct make{
    int x,y;
}a[5005];

int cmp (make i,make j)
{
    if(i.y!=j.y) return i.y<j.y;//需花的力气小的放在前面
    return i.x<j.x;//如果力气花的一样就看谁更矮
}

int main()
{
    cin>>n>>s>>m>>b;
    for(int i=1;i<=n;i++)
        cin>>a[i].x>>a[i].y;
    sort(a+1,a+n+1,cmp);//排序
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        if(m+b>a[i].x&&s-a[i].y>=0)//他够得着并且力气不会花完
        {
            s-=a[i].y;//把要的力气减了
            ans++;//答案+1
        }
    }
    cout <<ans<<" "<< endl;
    return 0;
}

by X2H_tato @ 2020-12-22 20:02:09

@max0810


by Hanghang @ 2020-12-22 20:04:48

@高高苦力怕

这不是哪个巨佬吗?


by X2H_tato @ 2020-12-22 20:11:27

@Hanghang ?您也在啊,帮我看看吧,刚学结构体排序


by Hanghang @ 2020-12-22 20:14:06

@高高苦力怕

有事,先下了


by X2H_tato @ 2020-12-22 20:15:29

@Hanghang 好吧


by Miquella @ 2020-12-22 20:33:34

我觉得应该是没考虑力气<0的情况,如果有这个情况直接break掉,然后如果高度大于>陶陶+椅子的高度,直接continue掉,这是我的做法...


by X2H_tato @ 2020-12-25 21:23:33

@杨晨毅 谢谢,我

m+b>a[i].x

应该改成

m+b>=a[i].x

谢谢提醒


by Miquella @ 2020-12-25 21:54:30

@高高苦力怕 没事,做对就行


|