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;
    }
    
  • 相关阅读:
    linux查看系统类型和版本
    javascript 中的继承实现, call,apply,prototype,构造函数
    redis原理分析
    HashTable 简述
    算法之 快速排序
    react js 之生命周期
    Java源代码编译过程
    Java字节码文件结构---概述
    Java程序运行时内存划分
    数据结构--汉诺塔--借助栈实现非递归---Java
  • 原文地址:https://www.cnblogs.com/ahawzlc/p/12599583.html
Copyright © 2011-2022 走看看