NOI.AC-保镖【贪心,对顶堆】
正题
题目链接:http://noi.ac/contest/266/problem/795
题目大意
nnn个人第iii个巡逻一次aia_iai秒,休息至少bib_ibi秒。
要求
- 任意时刻都有人巡逻
- 在一个人的两次相邻的巡逻直接不能有另一个人巡逻两次。
解题思路
对于性质二我们发现就是在nnn个人里选择最少的人轮流巡逻使得任意时刻都有人巡逻。
我们考虑贪心,将人按照bib_ibi排序,然后枚举就好了,这样我们就确定了最大的bib_ibi,所以我们要求前面的最大的数的和使得它的和足够就好了。
但是这样我们会发现有许多问题,因为这个人两次巡逻的间隔是不计算自己的巡逻时间的,
也就是sum−ai>bi⇒sum>bi+aisum-a_i>b_i\Rightarrow sum>b_i+a_isum−ai>bi⇒sum>bi+ai
所以我们改为按照bi+aib_i+a_ibi+ai排序就好了,然后对顶堆维护前若干个最大值使得他们的和满足max{bi+ai}max\{b_i+a_i\}max{bi+ai}
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const ll N=5e5+10;
struct node{ll t,b;
}a[N];
ll n,sum,z,ans=2147483647;
priority_queue<ll> q1,q2;
bool cmp(node x,node y)
{return x.b==y.b?x.t<y.t:x.b<y.b;}
int main()
{//freopen("data.in","r",stdin);scanf("%lld",&n);for(ll i=1;i<=n;i++){scanf("%lld%lld",&a[i].t,&a[i].b);a[i].b+=a[i].t;}sort(a+1,a+1+n,cmp);for(ll i=1;i<=n;i++){if(q1.empty()||a[i].t>-q1.top()){q1.push(-a[i].t);sum+=a[i].t;z++;}else q2.push(a[i].t);while(!q1.empty()&&sum>=a[i].b){sum+=q1.top();z--;q2.push(-q1.top());q1.pop();}while(!q2.empty()&&sum<a[i].b){sum+=q2.top();z++;q1.push(-q2.top());q2.pop();}if(sum>=a[i].b){ans=min(ans,z);}}if(ans==2147483647) printf("-1");else printf("%lld",ans);
}
NOI.AC-保镖【贪心,对顶堆】相关推荐
- 野鸡NOI.AC模拟赛【2019.10.26】
前言 截止至2019.10.2614:222019.10.26\ \ \ \ 14:222019.10.26 14:22 成绩 正题 T1:NOI.AC−T1:NOI.AC-T1:NOI.AC− ...
- nssl1477-赛【对顶堆,贪心】
正题 题目大意 nnn个物品,有两个人,每个人有一些喜欢的物品. 选mmm个物品,至少选择kkk个第一个人喜欢的和kkk个第二个人喜欢的物品 解题思路 首先我们必定是选最小的 我们从小到大枚举选择多少 ...
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- 106. 动态中位数【经典 / 对顶堆】
用对顶堆来维护.一个大根堆,一个小根堆. 大根堆存前一半的数据,小根堆存后一半的数据. 需要满足这样的一个条件: 大根堆最大的数<=小根堆最小的数 大根堆的数量最多比小根堆的数量多1,这样大根堆 ...
- NOI.AC#2007-light【根号分治】
正题 题目链接:http://noi.ac/problem/2007 题目大意 nnn个格子排成一排,每个格子有一个0/10/10/1和一个颜色.开始每个格子都是000,qqq次操作取反一个颜色的所有 ...
- NOI.AC#2139-选择【斜率优化dp,树状数组】
正题 题目链接:http://noi.ac/problem/2139 题目大意 给出nnn个数字的序列aia_iai.然后选出一个不降子序列最大化子序列的aia_iai和减去没有任何一个数被选中的 ...
- NOI.AC#2144-子串【SAM,倍增】
正题 题目链接:http://noi.ac/problem/2144 题目大意 给出一个字符串sss和一个序列aaa.将字符串sss的所有本质不同子串降序排序后,求有多少个区间[l,r][l,r][l ...
- NOI.AC#2266-Bacteria【根号分治,倍增】
正题 题目链接:http://noi.ac/problem/2266 题目大意 给出nnn个点的一棵树,有一些边上有中转站(边长度为222,中间有一个中转站),否则就是边长为111. mmm次询问一个 ...
- HDOJ 2037 今年暑假不AC 【贪心】
HDOJ 2037 今年暑假不AC [贪心] 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2037 给出n个电视节目的开始时间和结束时间, 要求合理安 ...
最新文章
- 点分治问题 ----------- HDU 5977 or 2016年大连ICPC [点分治+状态压缩]
- php类实例方法静态方法,PHP类中的静态方法使用实例
- 关于java数组拷贝的性能
- python3语法都相同吗_python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样...
- python3获取用户输入_python3.4控制用户输入与输出
- 导致集群重启_园区网核心交换机S7706异常重启导致无线网络故障
- win7 64位装sql2000
- 文本挖掘学习笔记(三):文档相似度、文档分类和情感分析
- 大数据“超能力”:数据安全和隐私该如何保障?
- vbox虚拟机网络设置
- rpm包与deb包的制作过程
- 创建和使用静态链接库
- 1、MyBatis框架入门学习CRUD
- Android如何降低service被杀死概率
- express 获取ip地址,并获取ip对应的城市名
- Excel·VBA指定条件删除整行整列
- 面向服务的整车E/E架构(SOA)开发咨询服务
- tomcat增大缓存的最大空间
- zzulioj1098: 复合函数求值(函数专题)
- mac:恢复出厂设置
热门文章
- java 按钮设置图片_Java中如何设置带图片按钮的大小
- android菜单和对话栏,Android回顾--(十一) 菜单和对话框
- java 创建以太坊代币_以太坊 (五)编写智能合约-建立简易加密代币
- linux内核修改工程环境,linux2.6.33内核移植s3c2410以和交叉环境编译搭建最终修改版.pdf...
- win10+tomcat+php+配置环境变量配置,Win10系统Tomcat环境变量配置方法
- mysql数据聚合技术_Mysql 去重 聚合
- spring boot 中@Mapper和@Repository的区别
- Leetcode周赛复盘——第 278 场力扣周赛
- Java Number Math 类方法
- [Java基础]抽象类和接口名作为形参和返回值