码迷,mamicode.com
首页 > 其他好文 > 详细

「土」巨石滚滚

时间:2020-05-25 12:26:57      阅读:49      评论:0      收藏:0      [点我收藏+]

标签:sort   return   finally   std   div   href   syn   ble   int   

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;
}

 

「土」巨石滚滚

标签:sort   return   finally   std   div   href   syn   ble   int   

原文地址:https://www.cnblogs.com/xcfxcf/p/12955966.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!