C++,codeforces,230A,A. Dragons

/*
codeforces,230A,A. Dragons
桐人需要击败n条龙,若力量大于龙的力量则能击败龙,否则会失败
初始时,桐人的力量为s,击败第i条龙后桐人的力量会增加y_i
第i条龙的力量是x_i
桐人可以按任意顺序与这n条龙对战
输入
s n
x_1 y_2
x_1 y_2
...

输出
若能打败输出YES,否则输出NO
*/

/*
获取
*/
#include <iostream>
#include <set>
#include <utility>
struct compare{
    //返回值为true时表示第一个参数应该排在第二个参数之前
    bool operator()(const std::pair<int,int>& a, const std::pair<int,int>& b) const{
        if(a.first==b.first){
            return a.second>b.second;
        }
        return a.first<b.first;
    }
};
int main(){
    int s,n;std::cin>>s>>n;
    std::multiset<std::pair<int,int>,compare> dragons;
    //标准库容器内部会将比较器作为常量对象来使用, 因此传入比较器的operator()必须是const

    for(int i=0;i<n;i++){
        //逐个获取输入

        int strength,bonus;std::cin>>strength>>bonus;
        if(strength<s){
            //如果能打过这条龙就直接战斗获得力量成长
            s+=bonus;
            //将multiset中力量小于桐人的龙全部消灭并获取力量增长
            while(!dragons.empty() && s>dragons.begin()->first){
                s+=dragons.begin()->second;
                dragons.erase(dragons.begin());
            }
        }else{
            dragons.insert({strength,bonus});
        }
    }
    if(dragons.empty()){
        std::cout<<"YES\n";
    }else{
        std::cout<<"NO\n";
    }
}
posted @ 2025-03-07 20:09  Kazuma_124  阅读(13)  评论(0)    收藏  举报