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;
    }
    
  • 相关阅读:
    python Exception中的raise、assert
    python循环语句与其他编程语言不同之处
    【转】最大似然估计
    尝试发表代码
    奇异分解(SVD)
    Python学习笔记3-string
    梯度下降法
    前后端分离
    Trie树
    HashMap的工作原理以及代码实现,为什么要转换成红黑树?
  • 原文地址:https://www.cnblogs.com/ahawzlc/p/12599583.html
Copyright © 2011-2022 走看看