hihocoder155周 任务分配

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

给定 N 项任务的起至时间( S1E1 ), ( S2E2 ), ..., ( SNEN ), 计算最少需要多少台机器才能按时完成所有任务。

同一时间一台机器上最多进行一项任务,并且一项任务必须从头到尾保持在一台机器上进行。任务切换不需要时间。

输入

第一行一个整数 N,(1 ≤ N ≤ 100000),表示任务的数目。 以下 N 行每行两个整数 SiEi,(0 ≤ Si < Ei ≤ 1000000000),表示任务的起至时间。

输出

输出一个整数,表示最少的机器数目。

样例输入
5
1 10
2 7
6 9
3 4
7 10
样例输出
           3
画个图不难发现题目其实就是求最多的重合时间次数。而怎么求这个最多的重合,还是有一些tricky的。
1.用pair<int,int>储存每个任务的开始时间和结束结束。
2.根据开始时间进行排序。(这个排序很关键)
3.然后依次遍历,如果pair开始的时间>=已有机器的结束时间,把这个pair中的结束时间插入到multiset中,最后set的size就是需要的机器数量。
ac代码:
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<vector>
 6 #include<set>
 7 using namespace std;
 8
 9
10 int main()
11 {
12     int n, start, end, res = 0;
13     vector<pair<int, int>> time;
14     multiset<int> st;
15     cin >> n;
16     for (int i = 0;i < n;i++) {
17         cin >> start >> end;
18         time.push_back(make_pair(start, end));
19     }
20
21     sort(time.begin(), time.end());
22     for (int i = 0;i < n;i++) {
23         set<int>::iterator it = st.begin();
24         while (it != st.end()) {
25             if (time[i].first >= *it) it = st.erase(it);
26             else break;
27         }
28         st.insert(time[i].second);
29         res = max(res, (int)st.size());
30     }
31     cout << res << endl;
32     return 0;
33 }


参考博文http://blog.csdn.net/qq508618087/article/details/51536947
 
时间: 2024-08-12 16:18:32

hihocoder155周 任务分配的相关文章

hiho 第155周 任务分配

最小路径覆盖会超时: 贪心思路: 按照开始时间排序,然后根据结束时间,维护一个以结束时间的单调递增的队列,每次与最快结束的任务进行比较即可: /* #include <cstdio> #include <algorithm> #include <cmath> #include <vector> #include <cstring> using namespace std; const int maxn = 100000+5; struct BPM

scrum学习心得

scrum的定义: ??Scrum是迭代式增量软件开发过程,通常用于敏捷软件开发.Scrum包括了一系列实践和预定义角色的过程骨架.Scrum中的主要角色包括同项目经理类似的Scrum主管角色负责维护过程和任务,产品负责人代表利益所有者,开发团队包括了所有开发人员.虽然Scrum是为管理软件开发项目而开发的,它同样可以用于运行软件维护团队,或者作为计划管理方法:Scrum of Scrums. scrum的特点: Scrum规定了一个非常简单的开发流程. Scrum是现有设计流程的总结. Scr

第六周作业:《人月神话》对我做项目实践的启示(一)

<人月神话>这本书有两个老师都有给我们推荐,第一个老师推荐时不以为然,第二个老师也推荐时,自己感觉应该是挺重要的吧,于是去图书馆借了这本书来看,刚借回来时,总觉得时间不够.作业很多,也没来的及看,就一直搁置在了那里,直到上周,在我们的项目实践开始近三周,但进度却一直赶不上来的情况下,看到了这本书,才拿起来看.目前还没看完,先写一点儿领悟到的东西. 作者从焦油坑,提出项目失败的表现,把过去几十年的大型系统开发比作一个炼焦坑,各种团队一个个地淹没在焦油坑,他们都试图解决面对的问题,但他们都必须去了

(第七周)内容汇总

项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:谢孝淼.李俞寰.杜桥 1.团队贡献分 黄兴 5.1  谢孝淼 4.8  李俞寰 5.2  杜桥 4.9 2.alpha视频发布 平台:优酷 链接:http://v.youku.com/v_show/id_XMTc3NDk4NjcyMA==.html?from=s1.8-1-1.2&spm=a2h0k.8191407.0.0 截图: 3.用户数 预期48小时用户数为30人,实际48小时用户数为28人.我们将项目文件上传到百度云盘中进行分享

每周更新学习进度表--第十周

每周更新学习进度表:   学习时间 新增代码行 博客量(篇) 知识总结 第一周  7h  80  2  对于软件工程这门课有个大致的了解,并在学习代码上步入正轨. 第二周  8h  100  4  四则运算:还有很多不足的地方,需要继续改进. 第三周  12h  100  5 课上对C语言各种语句重新复习了下,把不少渐渐生疏的语句又过了一遍,并尝试着编写简单语句i 后来看别人的四则运算发现需要回忆的太多,回宿舍把大一的C语言教材翻出来了—_—# 第四周  8h  200  6  重新安装了VS,

每周更新学习进度表--第九周

每周更新学习进度表:   学习时间 新增代码行 博客量(篇) 知识总结 第一周  7h  80  2  对于软件工程这门课有个大致的了解,并在学习代码上步入正轨. 第二周  8h  100  4  四则运算:还有很多不足的地方,需要继续改进. 第三周  12h  100  5 课上对C语言各种语句重新复习了下,把不少渐渐生疏的语句又过了一遍,并尝试着编写简单语句i 后来看别人的四则运算发现需要回忆的太多,回宿舍把大一的C语言教材翻出来了—_—# 第四周  8h  200  6  重新安装了VS,

每周更新学习进度表--第八周

每周更新学习进度表:   学习时间 新增代码行 博客量(篇) 知识总结 第一周  7h  80  2  对于软件工程这门课有个大致的了解,并在学习代码上步入正轨. 第二周  8h  100  4  四则运算:还有很多不足的地方,需要继续改进. 第三周  12h  100  5 课上对C语言各种语句重新复习了下,把不少渐渐生疏的语句又过了一遍,并尝试着编写简单语句i 后来看别人的四则运算发现需要回忆的太多,回宿舍把大一的C语言教材翻出来了—_—# 第四周  8h  200  6  重新安装了VS,

5月17日、18日---疯狂猜成语-----三周第五次站立会议 杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜

疯狂猜成语-----三周第五次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜 会议内容:一周的冲刺接近尾声,所以今天站立会议主要验收这一个星期的任务成果. 冲刺效果: 小组成员 已完成的任务 尹亚男    袁雪 游戏界面优化基本实现,数据收集完成 郭林林 完成代码的转换连接,并且对代码单元进行测试 胡潇丹 三个游戏的数据表结构基本完成,并且可以正常进行使用,并且对原来数据库进行完善 杨霏 完成后台和前台界面的连接调用,并且完成游戏的部分修改. 赵静娜 总结发送博客,公布组员任务分

搜查令——第二周

上周确定了项目后,完成了项目架构图和项目的思维导图. 这周任务: 建立团队GitHub项目 需求分析 用户需求 任务分配: 建立GitHub:由文档专员-彭佳丽负责 需求分析:由文档专员-彭佳丽撰写并上传到github上 用户需求:用户需求需要设计调查问卷,发布调查问卷,以及分析调查问卷.任务分配情况如下: 任务完成情况: 建立好了团队的Github--SuperEight,建立了团队项目--搜查令.地址:https://github.com/SuperEight2017 完成了需求分析并且发布