链接: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; }