第五届新疆省ACM-ICPC程序设计竞赛 -- 大吉大利

链接:https://ac.nowcoder.com/acm/contest/911/I
来源:牛客网

思想:因为它针对是金币数比它多的人,所以就是一个优先队列的操作,每次都把金币比它多的人提出来,然后操作,完事了再塞到队列去!

         

#include<bits/stdc++.h>
using namespace std;
struct node{
    int a , b;
}nums[100005];
bool operator<( node a, node b ){
     if(a.a == b.a) return a.b>b.b;
    return a.a<b.a;
}
priority_queue<node> q;
int main()
{
    int a ;
    cin>>a;
    int sum ;
    cin>>sum;
    int t = sum ;
    for(int i =  0 ; i < a-1 ; i++)
        cin>>nums[i].a;
    for(int i = 0 ;i < a-1 ; i++)
        cin>>nums[i].b;
    for(int i =0 ; i < a-1; i ++){
        q.push(nums[i]);
    }
    while(1){
        bool flog = false;
        node temp = q.top();
        q.pop();
        if(temp.a>=sum){
            flog = true;
            temp.a-=temp.b;
            sum--;
        }
        if(!flog)
            break;
        if(sum <= 0 )
            break;
        q.push(temp);
    }
    if(sum <=0)
        cout<<"-1"<<endl;
    else
        cout<<t-sum<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/Li-ningning/p/14108821.html