HDU6180-Schedule
来源:互联网 发布:特效视频软件手机 编辑:程序博客网 时间:2024/06/11 15:25
Schedule
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 153428/153428 K (Java/Others)Total Submission(s): 1042 Accepted Submission(s): 420
Problem Description
There are N schedules, the i-th schedule has start time si and end time ei (1 <= i <= N). There are some machines. Each two overlapping schedules cannot be performed in the same machine. For each machine the working time is defined as the difference between timeend and timestart , where time_{end} is time to turn off the machine and timestart is time to turn on the machine. We assume that the machine cannot be turned off between the timestart and the timeend .
Print the minimum number K of the machines for performing all schedules, and when only uses K machines, print the minimum sum of all working times.
Print the minimum number K of the machines for performing all schedules, and when only uses K machines, print the minimum sum of all working times.
Input
The first line contains an integer T (1 <= T <= 100), the number of test cases. Each case begins with a line containing one integer N (0 < N <= 100000). Each of the next N lines contains two integers si and ei (0<=si<ei<=1e9) .
Output
For each test case, print the minimum possible number of machines and the minimum sum of all working times.
Sample Input
131 34 62 5
Sample Output
2 8
Source
2017 Multi-University Training Contest - Team 10
题意:有n个需要全部完成工作(时间区间),每台机器同时只能做一份工作,并且机器开机后,除非做完最后一个作业,不然不关机。求在最少机器数的情况下,最少的工作的总时间。
解题思路:首先按照开始时间排序,一个一个工作的扫过去,对于每一个工作,找到结束时间最晚的并且小于等于这个工作的开始时间,让这个机器做这个工作就可以了,二分一些就好了。Algorithm里面的二分比set自带的二分要慢很多
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <set> #include <stack> #include <map> #include <climits> #include <functional> using namespace std;#define LL long long const int INF = 0x3f3f3f3f;inline char get(){ static char buf[100000], *p1 = buf, *p2 = buf; return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1++;}template <class T> inline bool read(T & x){ char ch = get(); if (ch == EOF) return false; while (ch<'0' || ch>'9') ch = get(); x = ch - '0'; while ((ch = get()) >= '0'&&ch <= '9') x = x * 10 + ch - '0'; return true;}struct node{ int l, r; bool operator<(const node &a)const { return l < a.l; }}a[100005];multiset<int> s;int n;int main(){ int t; scanf("%d", &t); while (t--) { scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d%d", &a[i].l, &a[i].r); sort(a, a + n); LL ans = 0; s.clear(); for (int i = 0; i < n; i++) { multiset<int>::iterator it = s.upper_bound(a[i].l); if (it == s.begin()) { ans += 1LL * (a[i].r - a[i].l); s.insert(a[i].r); } else { it--; ans += 1LL * (a[i].r - *it); s.erase(it); s.insert(a[i].r); } } printf("%d %lld\n", s.size(), ans); } return 0;}
阅读全文
0 0
- HDU6180-Schedule
- HDU6180 Schedule
- HDU6180-Schedule
- HDU6180
- hdu6180-贪心&互不重叠的线段的组数-Schedule
- HDU6180(贪心)
- Schedule
- schedule
- schedule
- schedule()
- schedule
- schedule
- Schedule
- Schedule
- 多校10_1010 hdu6180 贪心+STL:multiset
- 【Course Schedule】Course Schedule
- Backup Schedule
- Timer.schedule()
- MYSQL查询表的字段和表名
- 企业实训day2
- 向IntelliJ IDEA创建的项目导入Jar包的两种方式
- jmeter第一个用例
- 初识JavaScript(1)
- HDU6180-Schedule
- 元素(块、行内、行内块
- ubuntu安装mysql可视化工具MySQL-workbench及简单操作
- jdk安装与配置
- codeforces 359A Table
- 初次接入Spring-001
- caffe\tesorflow提供服务
- CUDA编程学习一
- iOS面试题宝典(-)