POJ 3614
2015-10-22 17:24
211 查看
POJ 3614
题目大意:奶牛美容:有C头奶牛日光浴,每头奶牛分别需要minSPF_i和maxSPF_i单位强度之间的阳光。现有L种防晒霜,分别能使阳光强度稳定为SPF_i,
其瓶数为cover_i。求最多满足多少头奶牛
贪心策略:现将奶牛的需求从小到大排列,防晒霜也这样排列,依次判断奶牛能否被防晒霜涂上,这样保证给了奶牛满足条件的最小需求。
题目大意:奶牛美容:有C头奶牛日光浴,每头奶牛分别需要minSPF_i和maxSPF_i单位强度之间的阳光。现有L种防晒霜,分别能使阳光强度稳定为SPF_i,
其瓶数为cover_i。求最多满足多少头奶牛
贪心策略:现将奶牛的需求从小到大排列,防晒霜也这样排列,依次判断奶牛能否被防晒霜涂上,这样保证给了奶牛满足条件的最小需求。
#include <iostream> #include <algorithm> #include <queue> #include <functional> using namespace std; pair<int, int> cow[2500 + 16]; pair<int, int> bottle[2500 + 16]; priority_queue<int, vector<int>, greater<int> > q; // 优先级队列,小元素优先出队 ///////////////////////////SubMain////////////////////////////////// int main() { int C, L; cin >> C >> L; for (int i = 0; i < C; ++i) { cin >> cow[i].first >> cow[i].second; } for (int i = 0; i < L; ++i) { cin >> bottle[i].first >> bottle[i].second; } sort(cow, cow + C); sort(bottle, bottle + L); int cur = 0; // 现在正等待涂防晒霜的奶牛的index int result = 0; for (int i = 0; i < L; ++i) { //只要奶牛非空并满足最小要求继续循环 while (cur < C && cow[cur].first <= bottle[i].first) { q.push(cow[cur].second); ++cur; } while (!q.empty() && bottle[i].second) { int maxSPF = q.top(); q.pop(); // “奶牛上限”比这一瓶的上限大,说明这头奶牛可以被涂上防晒霜 if (maxSPF >= bottle[i].first) { ++result; --bottle[i].second; } // else 这头奶牛不能被涂上,因为bottle是按SPF排过序的,没有比这瓶更小的SPF了 } } cout << result << endl; return 0; }
相关文章推荐
- GetImageSize用法
- ORACLE函数大全
- 手贱随手在Linux敲了 as 命令,出不来了
- C语言:编写从一个字符串中提取一个子字符串的函数my_substr
- 数据结构与算法--字符串
- 动态代理
- CSS:透明度 opacity与rgba()的区别
- Java学习笔记(十三):关于子类初始化的过程
- socket的发送与接收缓冲区
- iOS中设置导航栏标题的字体颜色和大小
- oracle 死锁和锁等待的区别
- 常用网线的规格及型号总结
- 各类数据库的jdbc驱动及连接字符串总结
- Week5-2Empirical/data driven approach to parsing
- ElasticSearch-集群搭建
- 016.循环语句进行100以内素数求和
- 【C语言】有一个分数序列 2/1+3/2+5/3+8/5+13/8+… 求出这个数列前 20 项的和。
- Jquery初始--文本格式
- TCP三次握手过程
- nodejs里的module.exports和exports的关系