2014 Multi-University Training Contest 1 — D. Task
题目链接: pid=4864">http://acm.hdu.edu.cn/showproblem.php?pid=4864
题目大意:
有N个机器。M个任务。
当中每一个机器有xi,yi。(xi表示每台机器的最长工作时间。yi表示机器能够完毕的任务难度值)
每一个任务有xi,yi。(xi表示完毕该任务须要的时间,yi表示任务的难度)每完毕一个任务,能够得到一笔钱:500 * xi + 2 * yi。
一台机器最多仅仅能做一个任务。一个任务最多仅仅能被完毕一次。
问:最多能完毕几个任务,且在完毕任务最多的情况下,能得到钱数最多为多少。
解题思路:
贪心的想法。将机器和任务依照一下规则排序:
假设xi不同。依照xi的大小从大到小排序;
假设xi同样,yi不同。依照yi的大小从大到小排序;
假设上述均同样,则依照机器排在任务前面。
经过排序之后。就保证了前面的 x 值一定比后面的 x 值大,仅仅须要比較 y 值就可以。遍历一次,假设碰到机器,则将 y 值存进一个multiset里面。假设碰到任务。那么在multiset里面找一个最小的不小于 yi 的值。用该机器去完毕该任务。
代码:
using namespace std;
typedef long long ll;
struct node {
int x, y, type;
} a[200010];
int n, m;
bool cmp(node s, node v) {
if (s.x != v.x) return s.x > v.x;
if (s.y != v.y) return s.y > v.y;
if (s.type != v.type) return s.type > v.type;
}
multiset<int> s;
multiset<int> :: iterator it;
int main () {
int x, y, cnt = 0;
while(~scanf("%d%d", &n, &m)) {
cnt = 0;
for (int i = 0; i < n; i++) {
scanf("%d%d", &a[cnt].x, &a[cnt].y);
a[cnt++].type = 1;
}
for (int i = 0; i < m; i++) {
scanf("%d%d", &a[cnt].x, &a[cnt].y);
a[cnt++].type = 0;
}
sort(a, a + cnt, cmp);
ll ans = 0;
ll t = 0;
s.clear();
for (int i = 0; i < cnt; i++) {
if (a[i].type == 1) s.insert(a[i].y);
else {
if(!s.empty()) {
it = s.lower_bound(a[i].y);
if (it == s.end()) continue;
t++;
ans += a[i].y * 2 + 500 * a[i].x;
s.erase(it);
}
}
}
printf("%I64d %I64d\n", t, ans);
}
return 0;
}
2014 Multi-University Training Contest 1 — D. Task的更多相关文章
- 2014 Multi-University Training Contest 9#11
2014 Multi-University Training Contest 9#11 Killing MonstersTime Limit: 2000/1000 MS (Java/Others) ...
- 2014 Multi-University Training Contest 9#6
2014 Multi-University Training Contest 9#6 Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Oth ...
- HDU4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)
Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- 2014 Multi-University Training Contest 1/HDU4864_Task(贪心)
解题报告 题意,有n个机器.m个任务. 每一个机器至多能完毕一个任务.对于每一个机器,有一个最大执行时间Ti和等级Li,对于每一个任务,也有一个执行时间Tj和等级Lj.仅仅有当Ti>=Tj且Li ...
- hdu 4946 2014 Multi-University Training Contest 8
Area of Mushroom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 2014 Multi-University Training Contest 1/HDU4861_Couple doubi(数论/法)
解题报告 两人轮流取球,大的人赢,,, 贴官方题解,,,反正我看不懂.,,先留着理解 关于费马小定理 关于原根 找规律找到的,,,sad,,, 非常easy找到循环节为p-1,每个循环节中有一个非零的 ...
- hdu 4937 2014 Multi-University Training Contest 7 1003
Lucky Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) T ...
- hdu 4941 2014 Multi-University Training Contest 7 1007
Magical Forest Time Limit: 24000/12000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- hdu 4939 2014 Multi-University Training Contest 7 1005
Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
随机推荐
- JAVA的一些小笔记
构造块优先于构造方法执行,而且每当有一个新的实例化对象产生时,就会重复执行构造块的程序. 静态块优先于构造块执行,而且不管有多少个实例化对象产生,静态块只会执行一次,它的主要作用是为类中的static ...
- 用ASP编写购物车代码
网上购物已成为生活的潮流,在网上购物之后,想要随时查看自己已买的东西,想要随时删除或改动某件商品数量,要怎么做呢?以下我就来写代码及释义.先来做用户登陆页面(login.asp): <html& ...
- ViewPager控件的Demo
1.主视图 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...
- [转]VMware 出现下述错误: Application failure. hr=0x80040101:Failed to initialize virtual machine.
VMware 出现下述错误:Application failure. hr=0x80040101:Failed to initialize virtual machine. 解决方法:1.重新注册这三 ...
- Python 第五篇(上):算法、自定义模块、系统标准模块(time 、datetime 、random 、OS 、sys 、hashlib 、json和pickle)
一:算法回顾: 冒泡算法,也叫冒泡排序,其特点如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应 ...
- LVS集群的体系结构
2.LVS主要组成部分为: 负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称 ...
- paip.按键替换映射总结
paip.按键替换映射总结 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/attilax 因为 ...
- 【linux kernel】 softirq 软中断讨论
欢迎转载,转载时需保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http:// ...
- 流行python服务器框架
流行python服务器框架 1.tonardo---- 多并发.轻量级应用, “非阻塞”的web 容器.类似tomcat.这个大家太熟悉了,就不多说了. 2.Twisted---- Twisted ...
- javascript 剔除数组中相同的值,合并数组中相同项
var a = ["2013-01","2013-01","2013-02","2013-02","2013- ...