题解 | #「土」巨石滚滚#

「土」巨石滚滚

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

一个超级贪心,最后一个情况没贪对 1:增加稳定的情况那么肯定是a小的先撞,反正都是增加所以先撞小的逐渐变大,才有机会撞大的; 2:稳定不变的随便撞 3:稳定减小的 分析:因为从头到尾收到的伤害总和是一定的,所以应该把回复多的放到前面才有能力撞下一个

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 500010;
int n ;
long long m;
int T;
struct node 
{
    int a , b , c;
}h[N];
bool cmp1(node u , node v)
{
    return u.c > v.c;
}
bool cmp2(node u , node v)
{ return u.a < v.a;
}
bool cmp3(node u , node v)
{
    return u.b > v.b;
}
int main()
{
    cin >> T;
    while(T--)
    {
        memset(h , 0 , sizeof h);
    cin >> n >> m;
    int cnt = 0;
    for(int i = 1 ;i <= n;i ++)
    {
        int a , b;
        cin >> a >> b;
        int z = b - a;
        if(z > 0) cnt ++;
        h[i] = {a , b , z};
    }
    sort(h + 1,h + 1 + n , cmp1);
    sort(h + 1 ,h + 1 + cnt , cmp2);
    sort(h + 1 + cnt , h + 1 + n , cmp3);
    int flag = 0;
//         for(int i = 1 ;i <= n;i ++) cout<<h[i].a<<" "<<h[i].b<<" "<<h[i].c<<endl;
    for(int i = 1 ;i <= n;i ++)
    {
        m -= h[i].a;
        if(m < 0)
        {
            flag = 1;
            break;
        }
        m += h[i].b;
    }
    if(!flag) cout << "Yes" << endl;
        else cout <<"No" << endl;
    }
}
全部评论

相关推荐

牛客741287455号:别笑,可能是以前部门的大佬,被辞职了,送外面,头发都变多了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
循此苦旅:月初笔试全a,没面试!
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务