DAY7L2【C001】
出自附中练习场【难度C】—————————————————————————————————————————————————————————————
【试题描述】有 N 个任务, 每个任务最多只能完成一次。另外,每个任务都有两个属性 c[i]、 d[i]。 c[i]的意思是第 i 个任务必须要在第 c[i]个单位时间或之前完成。完成第 i 个任务所需要的时间为 d[i]。 初始时 0 时刻。 求最多能完成几个任务。
【输入】第一行: N
接下来 N 行, d[i], c[i]
【输出】最多能完成的任务。
【输入样例】
4
100 200
200 1300
1000 1250
2000 3200
【输出样例】
3
【解题思路】典型贪心算法,我们称完成时间为t1,我们现在对t1进行排序,得到(样例:100 200 1000 2000)现在,我们可以建一个heap了(类似于队列),对于每一项任务,分两种大操作:插入或不插入,不插入又分两种,不做某项任务或把其他任务删除,更新为现在的任务。那么有几种触发条件1、如果当前大于等于最大,不插入2、如果小于,那就更新或插入。
【代码在地下200m】
——————————————————————————————————100m————————————————————————————————-———
——————————————————————————————————200m————————————————————————————————————
#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
#include <algorithm> using namespace std; const int N=150005; struct Heap
{
int A[N<<1|1], tot; void init(int n)
{
for(int i=1; i<=(n<<1|1); i++) A[i]=0;
tot=0;
} void Insert(int val)
{
A[++tot]=val;
for(int x=tot; x>1 && A[x]>A[x>>1]; x>>=1) swap(A[x], A[x>>1]);
} void Update(int val)
{
A[1]=val;
for(int i=1, j=2; j<=tot; i=j, j<<=1)
{
if((j|1)<=tot && A[j]<A[j|1]) j|=1;
if(A[j]<A[i]) break;
swap(A[i], A[j]);
}
}
} heap; struct data
{
int t1, t2;
bool operator < (const data &T) const
{
return t2<T.t2;
}
} A[N];
int n, ans, cur; int main()
{
while(scanf("%d", &n)!=EOF)
{
for(int i=0; i<n; i++) scanf("%d%d", &A[i].t1, &A[i].t2);
sort(A, A+n);
cur=ans=0, heap.init(n);
for(int i=0; i<n; i++)
{
if(A[i].t1+cur<=A[i].t2) ans++, heap.Insert(A[i].t1), cur+=A[i].t1;
else
{
if(!heap.tot) continue;
int val=heap.A[1];
if(val<=A[i].t1) continue;
cur-=val-A[i].t1;
heap.Update(A[i].t1);
}
}
printf("%d\n", ans);
}
//sysytem("pause");
return 0;
}
DAY7L2【C001】的更多相关文章
- 【C-001】printf理解
输出整型的数值就不说了, 显示浮点型: printf("%.2f",3.33); //保留两位小数显示,数字前面没有空格填充 显示的时候,设计到0-1之间的数的时候: printf ...
- 【BIEE】04_当维度表中的维不存在事实表中,需要展示所有维度并且数据类展示为0
有时候,我们往往会存在这样的需求 例如:事实表的数据如下 EMP_FACT表示事实表,DIM_LEVEL是维度表 预期效果:(根据员工信息,分析各等级员工工资与员工个数) 我们在BIEE报表中新建报表 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- Python高手之路【一】初识python
Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...
随机推荐
- Httpsqs的安装以及安装过程错误的解决方法 转
需求 :进行商品搜索的时候,要从索引中进行搜索,由于后台要更新商品和插入商品,当时考虑到了怎么来插入新的索引和更新索引的问题,通过讨论,大家决定用Httpsqs这个消息中间来通知插入新索引和删除索引最 ...
- C#文件夹和文件操作
File.Exist(string path)//文件读写FileStream fs=new FileStream(filename, FileMode.Create);BinaryWriter bw ...
- CSS应用给网页元素的几种方式总结
一.内联式样式表 直接在HTML标签中使用style进行定义样式.如:<p style="color:red;">这里是红色文字</p>. 二.嵌入式样式表 ...
- Linux iostat字段解析
iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息.用户可以通过指定统计的次数和时间来获得 ...
- python基础——实例属性和类属性
python基础——实例属性和类属性 由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(objec ...
- Innodb之拷贝InnoDB表从一服务器到另一台服务器2
本章节阐述将表移动到不同server上的技术.如可以将整个Mysql 实例转移到更大.更快的Server上:也可以拷贝整个实例到Slave上:也可以拷贝单个表或某些表到其他Server上(数据仓库). ...
- Django搭建简易博客
Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...
- monkey测试
一.理解monkey测试 1.Monkey测试是Android自动化测试的一种手段.Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常. 2.当Mon ...
- oracle数据库出现“批处理中出现错误: ORA-00001: 违反唯一约束条件”解决方法
最近使用oraclede impdp工具全库导入数据库时,在数据库里面使用出现如下情况. SQL state : 违反唯一约束条件 (GDXAORCL.SYS_C0055359) ; nested e ...
- Pyqt QListWidget之缩略图列表
QListWidget 可以设置模型setViewMode 当setViewMode值为QListView.IconMode 表示Icon模式 以下代码来自Pyqt Example #!/usr/b ...