本文写于2021-3-25

#include<bits/stdc++.h>
using namespace std;
int n,s,a,b,ans;
struct apple{
    int x,y;
}app[5005];
bool cmp(apple a,apple b){
    return a.x<b.x;
    return a.y<a.y;
}
int main()
{
    scanf("%d %d",&n,&s);
    scanf("%d %d",&a,&b);
    if(n==0){
        printf("%d",0);
        return 0;
    }
    for(int i=0;i<n;i++)
        scanf("%d %d",&app[i].x,&app[i].y);
    for (int i = n - 1; i >= 1; --i) {
        for (int j = 1; j <= i; ++j) {
            if (app[j].y > app[j + 1].y) {
                swap(app[j].y, app[j + 1].y);
                swap(app[j].x, app[j + 1].x);
            }
        }
    }
    for (int i = 1; i <= n; ++i) {
        if (app[i].x <= b + a) {
            s -= app[i].y;
            if (s < 0) {
                break;
            } else {
                ans++;
            }
        }
    }
    printf("%d",ans-1);
}

实际上我一开始不是这么写的。
结构体啥的没变

    for (int i = n - 1; i >= 1; --i) {
        for (int j = 1; j <= i; ++j) {
            if (app[j].y > app[j + 1].y) {
                swap(app[j].y, app[j + 1].y);
                swap(app[j].x, app[j + 1].x);
            }
        }
    }
    for (int i = 1; i <= n; ++i) {
        if (app[i].x <= b + a) {
            s -= app[i].y;
            if (s < 0) {
                break;
            } else {
                ans++;
            }
        }
    }

就是这里,排序和算摘到的个数有点问题。
我用的是sort。
可是爆掉了。算个数用的是while
看了看题解,改了下方式就好了,用冒泡+for便AC了?
出题的人好变态啊!弄了个0 0 0 0要求输出0
于是我加了个特判n==0;