JZOJ 3928. 【NOIP2014模拟11.6】射击
3928. 【NOIP2014模拟11.6】射击 (Standard IO)
Time Limits: 1000 ms Memory Limits: 65536 KB
Description
有问题,找副连,无聊的时候当然也可以找他啦。小W找到了他的叔叔——东厂厂长——宇宙超级无敌老WS yy。他们叔侄两个商量之后决定用弹弓打破社区里的一些窗户,但是弹弓每秒只能彻底打破一扇窗户。而且如果某户窗户的主人回来了的话,他们就不能进行破坏了(不然会死得很惨的)。因为有的人装的玻璃好,有的人装的玻璃差,有的人装的玻璃高,有的人装的玻璃矮,所以你不能要求他们叔侄两个打破不同的窗户获得的快乐值必须相同。现在他们想知道在能活着的情况下能够获得的最大快乐值。
Input
第一行一个正整数n,表示共有n个窗户。
接下来n行,每行两个整数,第一个为窗子的主人回来的时刻(秒),第二个为破坏该窗户所能获得的快乐值。
Output
最大的快乐值。
Sample Input
4
1 19
2 10
1 20
2 15
Sample Output
35
Hint
样例说明:
在第0个时刻,他们选择破坏掉3号窗户,在第1个时刻,因为1号窗户的主人已经回来了,所以不能去破坏1号窗户,只能去破坏2号窗户或4号窗户,显然选择4号窗户。总的快乐值就是20+15=35。
Data Constraint
20%的数据,n<=100。
40%的数据,n<=50000。
100%的数据,n<=200000,快乐值的绝对值不超过32767,时刻非负且小于2^31。
题解
这道题有人说用并查集,但是我觉得用贪心+堆更好理解
记第 i 个窗户时间为 a [ i ] . t ,快乐值为a [ i ] . c
先将时间从小到大排序
然后从头开始加,用小根堆维护已选择的窗户
如果个数没达到当前上限,那就选择
如果个数已经达到了上限,而且当前的 c 大于堆顶元素,那就替换
ps:好久没写堆了,可能有点问题,但是能过
代码
#include<cstdio>
#include<algorithm>
#include<vector>
#define N 200010
using namespace std;
struct point{
long t,c;
}a[N];
vector<point>dui;
bool operator >(point a,point b)
{
return a.c>b.c;
}
bool operator <(point a,point b)
{
return a.c<b.c;
}
bool tmp(point a,point b)
{
if(a.t!=b.t)return a.t<b.t;
else return a>b;
}
void ins(point key)
{ long now;
dui.push_back(key);
for(now=dui.size()-1;now>0&&dui[now>>1]>dui[now];now>>=1)
swap(dui[now],dui[now>>1]);
}
void gai(point key)
{ long now;
bool t;
dui[0]=key;
now=0;
t=true;
while((now<<1)+1<=dui.size()&&t){
t=false;
if(dui[now<<1]<dui[(now<<1)+1]){
if(dui[now]>dui[now<<1]){
swap(dui[now],dui[now<<1]);
now<<=1;
t=true;
}
}else
if(dui[now]>dui[(now<<1)+1]){
swap(dui[now],dui[(now<<1)+1]);
now=(now<<1)+1;
t=true;
}
}
}
int main()
{ long n,i,ans=0;
scanf("%ld",&n);
for(i=1;i<=n;i++)
scanf("%ld%ld",&a[i].t,&a[i].c);
sort(a+1,a+n+1,tmp);
for(i=1;i<=n;i++)if(a[i].t!=0){
if(dui.size()<a[i].t&&a[i].c>0)
ins(a[i]);
else if(a[i].c>dui[0].c)
gai(a[i]);
}
for(i=0;i<dui.size();i++)
ans+=dui[i].c;
printf("%ld\n",ans);
return 0;
}
JZOJ 3928. 【NOIP2014模拟11.6】射击的更多相关文章
- JZOJ 3929. 【NOIP2014模拟11.6】创世纪
3929. [NOIP2014模拟11.6]创世纪 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 上帝手 ...
- JZOJ 3927. 【NOIP2014模拟11.6】可见点数
3927. [NOIP2014模拟11.6]可见点数 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description ZP ...
- [JZOJ 4307] [NOIP2015模拟11.3晚] 喝喝喝 解题报告
题目链接: http://172.16.0.132/senior/#main/show/4307 题目: 解题报告: 题目询问我们没出现坏对的连续区间个数 我们考虑从左到有枚举右端点$r$,判断$a[ ...
- 【NOIP2014模拟11.3】噪音
题目 FJ有M个牛棚,编号1至M,刚开始所有牛棚都是空的.FJ有N头牛,编号1至N,这N头牛按照编号从小到大依次排队走进牛棚,每一天只有一头奶牛走进牛棚.第i头奶牛选择走进第p[i]个牛棚.由于奶牛是 ...
- 【NOIP2014模拟11.3】蛋糕
题目 今天是Bessie的生日,他买了一个蛋糕和朋友们一起分享,蛋糕可以看成是一个R行C列的表格,共有R*C个格子,每个格子都有一个0至9的数字,表示该格子蛋糕拥有的巧克力.现在Bessie要把蛋糕横 ...
- JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C
3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...
- JZOJ 3508. 【NOIP2013模拟11.5B组】好元素
3508. [NOIP2013模拟11.5B组]好元素(good) (File IO): input:good.in output:good.out Time Limits: 2000 ms Mem ...
- JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)
3518. [NOIP2013模拟11.6A组]进化序列(evolve) (File IO): input:evolve.in output:evolve.out Time Limits: 1000 ...
- JZOJ 3505. 【NOIP2013模拟11.4A组】积木(brick)
3505. [NOIP2013模拟11.4A组]积木(brick) (File IO): input:brick.in output:brick.out Time Limits: 1000 ms Me ...
随机推荐
- BCrypt BCryptPasswordEncoder
package org.linlinjava.litemall.core.util.bcrypt; // Copyright (c) 2006 Damien Miller <djm@mindro ...
- LoggingService
package me.zhengjie.common.aop.log; import java.lang.annotation.ElementType; import java.lang.annota ...
- centos设置上网代理
假设我们要设置代理为 IP:PORT 1.网页上网网页上网设置代理很简单,在firefox浏览器下 Edit-->>Preferences-->>Advanced-->& ...
- QTP基本循环正常遍历(代码方式实现)
0 环境 系统环境:win7 1 操作(正常遍历篇) 1.1 代码前看 systemutil.Run "D:\Program Files (x86)\HP\QuickTest Profess ...
- ssh 怎样以root用户登录
#sudo vim /etc/ssh/sshd_config 找到并用#注释掉这行:PermitRootLogin prohibit-password 新建一行 添加:PermitRootLogin ...
- 吴裕雄--天生自然 HADOOP大数据分布式处理:CenterOS 7 多台物理机、虚拟机相互桥连接ping通,并且能够成功连接外网
选择用于桥接模式下的虚拟交换机,并且要选择对应的有线或者无线的网卡,如果主机是插网线联网的,那就选择有线网卡,如果主机是连无线网络的就选择无线网卡.Realtek PCIe GBE Family Co ...
- worship|spurs|drowns out|frauds|expell|spray with|deposit|moist|gave a sigh
to have or show a strong feeling of respect and admiration for God or a god 敬奉,崇拜,信仰(上帝或神) On the is ...
- springboot学习笔记:6.内置tomcat启动和外部tomcat部署总结
springboot的web项目的启动主要分为: 一.使用内置tomcat启动 启动方式: 1.IDEA中main函数启动 2.mvn springboot-run 命令 3.java -jar XX ...
- Linux安装完后的调优(linux 6)
1:关闭 SELinux 方法一: #sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #替换文本参数 ...
- ffmpeg直播系统
1.HLS协议 http live streaming 将本地文件或者摄像头视频转成hls流文件 https://www.ffmpeg.org/ffmpeg-all.html#hls-2 2.rtmp ...