习题-「土」巨石滚滚(排序cmp的改写)

习题-「土」巨石滚滚

#include <bits/stdc++.h>
using namespace std;

const int N = 500010;

#define int long long

struct Peo{
    int a, b;
    bool operator < (const Peo w){
        //如果都是增加,则应先满足撞得最小
        if(b - a > 0 && w.b - w.a > 0) return a < w.a;
        //如果都是减少,则应先满足撞后增加的多,因为前面能加的都已经加过,撞不过去就肯定无解
        else if(b - a <= 0 && w.b - w.a <= 0) return b > w.b;
        //否则选择能增加的
        return b - a > w.b - w.a;
    }
}p[N];

signed main(){
    int t; cin >> t;
    while(t--){
        int n, m; cin >> n >> m;
        for(int i = 1; i <= n; ++i) cin >> p[i].a >> p[i].b;
        sort(p + 1, p + 1 + n);
        bool flag = true;
        for(int i = 1; i <= n; ++i){
            m -= p[i].a;
            if(m < 0) {flag = false;  break;}
            m += p[i].b;
        }
        if(flag) cout << "Yes" << endl;
        else cout << "No" << endl;
    }
    
    return 0;
}
posted @ 2025-03-27 18:29  awei040519  阅读(7)  评论(0)    收藏  举报