div 902 b ( 贪心

Problem - B - Codeforces

#include
using namespace std;
using VI = vector;
using ll = long long;
using PII = pair ;
const int mod = 998244353;

void solve(){
    ll n,p;
    cin>>n>>p;
    //cout< a(n+1) , b(n+1);
    vector h;
    //先把小的人叫起来
    //3 + 4 +
    for(int i = 0 ; i < n ; i++) {
        cin>>a[i];
    }
    for(int i = 0 ; i < n ; i++) {
        cin>>b[i];
        h.push_back({b[i] , i});
    }
    sort(h.begin() , h.end());
    ll res = p;
    ll ct = 1;
    for(int i = 0 ; i < n ; i++){
        if(h[i].first < p){
            ll d = min(a[h[i].second] , n - ct);
            ct += d;
            res += d * h[i].first;
            if(ct == d)break;
        }else{
            break;
        }

    }
    cout<>t;
    while(t--){
        solve();
    }
}

挺有思维的一个b我感觉哈哈哈

因为有 p 那么只有小于p的花费的人才是做贡献的

考虑每个人都要被叫醒,那么使每个人被叫醒的花费最少 , 于是花费小的人肯定要尽量多使用,

于是能用小于p的花费就使用 , 如果不够,那么剩下的人就直接用p叫醒

你可能感兴趣的:(基本算法,算法,c++,图论)