「土」巨石滚滚

https://ac.nowcoder.com/acm/problem/53681

intial :

a 从小到大,b 从大到小

 

finally

b - a分为连部分

前部分 : 正的 a 从小到大,

后部分 : 负的  b 从大到小

???

最后收益是正的,也就是说m是一直增加的,自然要从消耗小的开始

最后收益是负的,m是一直减少的 ,要补充最多的,

 

 

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 5e5+5;

int t;
int n,m;
struct node{
    int a,b,c;
}p[maxn];

bool cmp(node a,node b){
    if(a.c >= 0 && b.c >= 0) return a.a < b.a;
    else if(a.c < 0 && b.c < 0) return a.b > b.b;
    return a.c > b.c;
}

signed main(){
    ios::sync_with_stdio(0);
    cin >> t;
    while(t--){
       cin >> n >> m;
        for(int i=1;i<=n;++i){
            cin >> p[i].a >> p[i].b;
            p[i].c = p[i].b-p[i].a;
        }
        sort(p+1,p+n+1,cmp);
        for(int i=1;i<=n;++i){
            m -= p[i].a;
            if(m < 0) break;
            m += p[i].b;
        }
        if(m < 0) cout << "No" << endl;
        else cout << "Yes" << endl;
    }
    return 0;
}

 

原文链接: https://www.cnblogs.com/hazelxcf/p/12955966.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    「土」巨石滚滚

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/350837

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午6:32
下一篇 2023年3月2日 上午6:33

相关推荐