hihocoder-1309-任务分配
1309 : 任务分配
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN, EN ), 计算最少需要多少台机器才能按时完成所有任务。
同一时间一台机器上最多进行一项任务,并且一项任务必须从头到尾保持在一台机器上进行。任务切换不需要时间。
输入
第一行一个整数 N,(1 ≤ N ≤ 100000),表示任务的数目。 以下 N 行每行两个整数 Si, Ei,(0 ≤ Si < Ei ≤ 1000000000),表示任务的起至时间。
输出
输出一个整数,表示最少的机器数目。
- 样例输入
-
5 1 10 2 7 6 9 3 4 7 10
- 样例输出
-
3
题解:
模拟整个流程。
用map将起始点 和 终结点结合起来。 起始点 += 1, 终结点 -= 1, 然后对这个 map 进行遍历即可得到 answer。
类似的, 也可以用来求完成任务的最大资源需求, 将上面的 1 改为 资源需求量即可。
#include <cstdio> #include <map> using namespace std; int main(){ freopen("in.txt", "r", stdin); int n, s, e, ans; while(scanf("%d", &n ) != EOF){ map<int, int> mp; for(int i=1; i<=n; ++i){ scanf("%d %d", &s, &e); mp[s] += 1; mp[e] -= 1; } ans = 0; int cur = 0; for(auto iter = mp.begin(); iter != mp.end(); ++iter){ cur += iter->second; if(ans < cur){ ans = cur; } } printf("%d ", ans ); } return 0; }