Luogu P4053 [JSOI2007]建筑抢修
一道贪心题,看数据范围就知道要套一个数据结构上去。
别走啊不是什么很高级的数据结构
考虑最朴素的想法,按建筑的抢修时间排序并先拿小的
然后随便想想都可以找到一堆反例
所以我们就直接考虑模拟这个过程,按报废时间排序
我们扫描到一个建筑时,分情况讨论:
- 如果可以修好,直接拿去修。并且把这个建筑扔到一个堆里(大根堆)。为后面的操作做准备。
- 如果不能修好,就将这个建筑的修理时间\(t_i\)和堆顶的元素的\(t_j\)比较。若\(t_i<t_j\),我们就弹出堆顶并选择修理这个建筑(也要扔到堆里)
贪心的正确性很好证明,我们在面对一个建筑无法修好时,若可以放弃之前的一个占用时间更大的建筑而转修它,肯定会减少总耗时
CODE
#include<cstdio>
#include<cctype>
#include<queue>
#include<algorithm>
using namespace std;
const int N=150005;
priority_queue <int> big;
struct data
{
int t,w;
}a[N];
int n,ans; long long tot;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch; while (!isdigit(ch=tc()));
while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
}
inline bool cmp(data a,data b)
{
return a.t<b.t;
}
int main()
{
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
register int i; read(n);
for (i=1;i<=n;++i)
read(a[i].w),read(a[i].t);
sort(a+1,a+n+1,cmp);
for (i=1;i<=n;++i)
{
if (tot+a[i].w<=a[i].t) tot+=a[i].w,++ans,big.push(a[i].w); else
{
if (a[i].w<big.top()) tot-=big.top(),big.pop(),big.push(a[i].w),tot+=a[i].w;
}
}
return printf("%d",ans),0;
}
Luogu P4053 [JSOI2007]建筑抢修的更多相关文章
- 洛谷——P4053 [JSOI2007]建筑抢修
P4053 [JSOI2007]建筑抢修 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的 ...
- 洛谷 P4053 [JSOI2007]建筑抢修
传送门 思路 首先题意比较容易明白: n个建筑需要修复,只能同时修一个建筑,每个建筑修复需要t1时间,且必须在t2时间前修完,否则此建筑报废 问最多能修好多少个建筑 如果一个建筑在规定时间内没有修好的 ...
- P4053 [JSOI2007]建筑抢修
题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建 ...
- 洛谷P4053 [JSOI2007]建筑抢修
放题解 题目传送门 放代码 #include <bits/stdc++.h>//万能头 #define MAXN 150000//最多的建筑数量(数据范围) using namespace ...
- P4053 [JSOI2007]建筑抢修 堆贪心
思路:堆贪心 提交:1次 题解: 先按时间\(sort\),然后如果能修就直接扔堆里,不能修取堆顶比一下时间长短,把时间短的扔进堆: #include<cstdio> #include&l ...
- 题解-------P4053 [JSOI2007]建筑抢修
传送门 贪心+左偏树 贪心思路:先修快炸的楼 所以我们可以按照$T2$从大到小做一遍排序,然后从$1\cdots n$一个一个去修,如果这栋楼不能修(也就是当前时间已经超过$T2_{i}$),那我们就 ...
- 【贪心】【P4053】[JSOI2007] 建筑抢修
[贪心][P4053][JSOI2007] 建筑抢修 Description 有 \(n\) 个工作,第 \(i\) 个工作做完需要 \(a_i\) 的时间,并且必须在 \(b_i\) 时刻前完成.求 ...
- BZOJ1029: [JSOI2007]建筑抢修[模拟 贪心 优先队列]
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 3785 Solved: 1747[Submit][Statu ...
- BZOJ 1029: [JSOI2007]建筑抢修 堆+贪心
1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有 ...
随机推荐
- Angular基础(七) HTTP & Routing
一.HTTP a)Angular提供了自己的HTTP库来调用外部API,为了能够在等待API响应的过程中继续与界面交互,采用异步HTTP请求的方式. b)Get请求,首先导入Http, Respo ...
- http协议及长连接和短连接
1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议. IP协议主要解决网络路由和寻址 ...
- springcloud 入门 10 (eureka高可用)
eureka高可用: 说白了,就是加一个实例作为原实例的备份,然后一起对外提供服务.这样可以保证在一台机器宕机的时候,整个系统不会死掉.保证其继续对外服务. eureka的集群化: 服务注册中心Eur ...
- recovery uncrypt功能解析(bootable/recovery/uncrypt/uncrypt.cpp)
我们通常对一个文件可以直接读写操作,或者普通的分区(没有文件系统)也是一样,直接对/dev/block/boot直接读写,就可以获取里面的数据内容了. 当我们在ota升级的时候,把升级包下载到cach ...
- [20180604]在内存修改数据(bbed).txt
[20180604]在内存修改数据(bbed).txt --//以前曾经做过在内存修改数据,通过oradebug poke命令修改内存信息,相关链接:--//http://blog.itpub.net ...
- python-Tkinter整理总结
笔者学习Tkinter模块也有好久时间了,现将学习的做以整理. tkinter简介(一) tkinter中lable标签控件(二) tkinter中button按钮控件(三) tkinter中entr ...
- 总结Hibernate4.1+版本与Hibernate3.3+版本区别
利用休假时间好好学习了当今流行的ORMapping框架-Hibernate,看完了马士兵老师经典的Hibernate视频教程,也算是小小入门了吧. 马老师在讲课中使用的Hibernate版本是3.3. ...
- 09LaTeX学习系列之---Latex 字体的设置
目录 目录: (一) 字体族的设置 1.说明: 2.源代码: 3.输出结果: (二) 字体系列的设置 1.源代码: 2.输出效果: (三) 字体形状的设置 1.源代码: 2.输出效果: (四) 字体大 ...
- 【夯实PHP基础】微信小程序开发 2017.02.06
本文地址 分享提纲 1. 概述 2. 简易教程 1. 概述 1)[小程序是什么] 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 2)[快速体验 ...
- 理解LSTM
本文基于Understanding-LSTMs进行概括整理,对LSTM进行一个简单的介绍 什么是LSTM LSTM(Long Short Term Memory networks)可以解决传统RNN的 ...