【贪心+优先队列】1428 活动安排问题【51nod】【难度:2级算法题】
2016-05-21 00:06
225 查看
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428
有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?
Input
Output
Input示例
Output示例
哎,最近写题目也不知道怎么回事,烦心的事情他多了,也不知道我该往哪个方向发展,没有人可以问,也没有人可以指导,好烦。都静不下心来,这个题目本来有想法的,结果却也不知道怎么下手,还是要看别人代码。
思路:
首先,按照开始时间排序。然后依次将每个活动的结束时间入队,意思是下个活动可以从这个时间继续接着使用教室而不用申请教室。
为什么要按照开始时间排序,因为这样的排序会让你入队的顺序是开始时间从低到高,这样可以直接判断要不要申请教室。
代码:
有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?
Input
第一行一个正整数n (n <= 10000)代表活动的个数。 第二行到第(n + 1)行包含n个开始时间和结束时间。 开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
Output
一行包含一个整数表示最少教室的个数。
Input示例
3 1 2 3 4 2 9
Output示例
2
哎,最近写题目也不知道怎么回事,烦心的事情他多了,也不知道我该往哪个方向发展,没有人可以问,也没有人可以指导,好烦。都静不下心来,这个题目本来有想法的,结果却也不知道怎么下手,还是要看别人代码。
思路:
首先,按照开始时间排序。然后依次将每个活动的结束时间入队,意思是下个活动可以从这个时间继续接着使用教室而不用申请教室。
为什么要按照开始时间排序,因为这样的排序会让你入队的顺序是开始时间从低到高,这样可以直接判断要不要申请教室。
代码:
#include<iostream> #include<algorithm> #include<queue> using namespace std; struct node { int x,y; friend bool operator< (node a,node b) { return a.x<b.x; } }p[10010]; int main() { int n; cin.sync_with_stdio(false); cin>>n; for(int i=0;i<n;i++) cin>>p[i].x>>p[i].y; sort(p,p+n); priority_queue<int,vector<int>,greater<int> >q; q.push(p[0].y); int ans=1; for(int i=1;i<n;i++){ int a=q.top(); if(a<=p[i].x){ q.pop(); q.push(p[i].y); }else{ ans++; q.push(p[i].y); } } cout<<ans<<endl; return 0; }
相关文章推荐
- nyoj 290 动物统计加强版 <字典树>
- samsung bios configuration怎么设置U盘启动
- View(视图)——ListView之BaseAdapter和SimpleCursorAdapter以及网格视图代码视图
- hdoj2029
- 编译模块时遇到Invalid module 4000 format
- Hibernate_ManyToMany_Demo
- 分布式网络爬虫的基本实现简述
- SDUT 3344 数据结构实验之二叉树五:层序遍历
- STL的迭代器和类型萃取
- 每日安全资讯:谷歌发现 G Suite 漏洞,部分密码明文存储长达十四年
- 浅析正则表达式-替换原则(.NET) 图文
- 正则替换实现输入框只能有数字、中英文逗号
- 自动检测数字替换非数字的正则表达式
- JavaScript replace new RegExp使用介绍
- 在VS2008中使用正则表达式进行查找和替换
- VS里的正则表达式的替换技巧
- ASP.NET web.config中 数据库连接字符串加密解密
- python列表的常用操作方法小结
- python实现用户登录系统
- python字符串的常用操作方法小结