Codeforces 725D By Assassin

题意:acm队伍可以得气球,相同气球数是一个排名。每个队伍有一个成熟上限,如果该队伍的气球数大于上限,该队伍被淘汰!给了你队伍的气球数,你的气球可以给别人,问你最大可能的排名

思路:用优先队列,首先用big记录比你气球多的队伍,该队伍被撑爆淘汰需要给他的气球数,big用递增序列!用small记录小于等于你的气球数的队伍信息,用pair重定义一下。
解题的思路是,比你气球数多的,你只能通过给他气球淘汰他,那么肯定贪心给的球越少打败他越好。(因为你给出了气球,原来比你少的可能在你给出气球之后比你多)。每一次给出气球,把small的大于现在的你的气球数的情况压入到big中,这时你的排名是big.size()+1,每一次更新一下最小值即可。

上代码,很好理解
#include
#define ll long long
#define input freopen("input.txt","r",stdin)
using namespace std;
typedef pair P;
priority_queue

small; priority_queue,greater >big; long long v,w,v1,w1; int main() { input; int i,n,pos; while(scanf("%d",&n)!=EOF) //一定要用scanf很省时间,用cin是2秒!这个只需要400毫秒! { scanf("%lld%lld",&v,&w); //一定要用scanf很省时间,用cin是2秒!这个只需要400毫秒! for(i=1;i(v1,w1)); else big.push(w1-v1+1); } pos=big.size()+1; while(!big.empty()) { if(vbig.size()+1) pos=big.size()+1; } cout<




你可能感兴趣的:(模拟,排序,xjb搞)