zoukankan      html  css  js  c++  java
  • 题解 CF725D 【Contest Balloons】

    这道题可以用排序 + 堆的方式解答。

    可以想到一种贪心策略:每次放飞一个花费气球最少的队伍,即 (min{w-t+1})

    这个我们用小根堆来实现。

    然后因为排名是按照气球数量 t 来决定的,所以要先排名,把气球多的队伍放前面,然后逐一放飞直到再也无力放飞为止。

    因为有可能存在放飞一个队伍之后自己排名反而被后面的队伍 KO ,所以必须在处理的时候更新答案。

    #include<bits/stdc++.h>
    #define int long long
    #define pi pair<int,int>//懒得用结构体了
    #define F first
    #define S second
    using namespace std;
    priority_queue<int,vector<int>,greater<int> > q;//STL大法好
    pi te[300005];
    signed main() {
    	int n,t,w;
    	cin>>n>>t>>w;
    	for(int i=2; i<=n; i++) {
    		int x,y;
    		cin>>x>>y;
    		te[i]=make_pair(x,y);
    	}
    	sort(te+2,te+n+1);//排序(此处是从小到大)
        //第一个输入的本队,所以不用排序
    	int i=n,rank=0x3f3f3f3f;//所以i要从n开始到2
    	while(1) {
    		for(; i>=2&&te[i].F>t; i--)//把比自己优秀的入堆
    			q.push(te[i].S-te[i].F+1);
    		rank=min(rank,(long long)q.size()+1);
    		if(q.size()&&t>=q.top()) {
    			t-=q.top();//付出代价
    			q.pop();//拜拜您内
    		} else {//当无力迫害或已经rk1的时候退出
    			cout<<rank;
    			break;
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    你可见过一种基于状压的二进制筛法?
    dp
    tricks
    csp2020 游记
    洛谷P2982 [USACO10FEB]慢下来Slowing down
    NOIP 2018 大翻车记
    2019 ICPC 南京网络赛
    POJ2778 AC自动机 + 快速矩阵幂
    2019 CCPC网络赛
    2018ICPC 北京
  • 原文地址:https://www.cnblogs.com/ahawzlc/p/12599583.html
Copyright © 2011-2022 走看看