Description

  To avoid unsightly burns while tanning, each of the C (1 ≤ C ≤ 2500) cows must cover her hide with sunscreen when they're at the beach. Cow i has a minimum and maximum SPF rating (1 ≤ minSPFi ≤ 1,000; minSPFi ≤ maxSPFi ≤ 1,000) that will work. If the SPF rating is too low, the cow suffers sunburn; if the SPF rating is too high, the cow doesn't tan at all........

  The cows have a picnic basket with L (1 ≤ L ≤ 2500) bottles of sunscreen lotion, each bottle i with an SPF rating SPFi (1 ≤ SPFi ≤ 1,000). Lotion bottle i can cover coveri cows with lotion. A cow may lotion from only one bottle.

  What is the maximum number of cows that can protect themselves while tanning given the available lotions?

Input

  * Line 1: Two space-separated integers: C and L
  * Lines 2..C+1: Line i describes cow i's lotion requires with two integers: minSPFi and maxSPFi 
  * Lines C+2..C+L+1: Line i+C+1 describes a sunscreen lotion bottle i with space-separated integers: SPFi and coveri

Output

  A single line with an integer that is the maximum number of cows that can be protected while tanning

Sample

Sample Input

Sample Output

题意:

  有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值,太大太小都没有作用。

  而刚开始的阳光的强度非常大,奶牛都承受不住,然后奶牛就得涂抹防晒霜,防晒霜的作用是让阳光照在身上的阳光强度固定为某个值。

  那么为了不让奶牛烫伤,又不会没有效果。

  给出了L种防晒霜。每种的数量和固定的阳光强度也给出来了

  每个奶牛只能抹一瓶防晒霜,最后问能够享受晒太阳的奶牛有几个。

思路:

  防晒霜从小到大排序

  奶牛能承受的最小值从小到大排序

  从最小的防晒霜枚举,将所有符合最小值小于等于该防晒霜的奶牛的最大值放入优先队列之中。

  然后优先队列是小值先出

  因为把牛能承受的最小值从小到大排序后,牛能承受的最大值越小,则这只牛能选择的防晒霜的种类越受限,也就是说如果一只牛能承受1-3,另一只能承受1-5,有一个2的防晒霜,则这个防嗮爽优先给能承受1-3的使用。

  所以就可以将这些最大值中的最小的取出来

代码:

#include<stdio.h>
#include<stack>
#include<algorithm>
#include<queue>
#include<iostream>
#include<string.h>
#include<string>
using namespace std;
struct node
{
int begin;
int end;
} cow[];
struct node1
{
int number;
int spf;
} l[];
bool cmp(struct node a,struct node b)
{
return a.begin<b.begin;
}
bool cmp1(struct node1 a,struct node1 b)
{
return a.spf<b.spf;
}
int main()
{
int m,n,logo=;
scanf("%d%d",&m,&n);
for(int i=; i<m; i++)
scanf("%d%d",&cow[i].begin,&cow[i].end);
// cin>>cow[i].begin>>cow[i].end;
for(int i=; i<n; i++)
scanf("%d%d",&l[i].spf,&l[i].number);
//cin>>l[i].spf>>l[i].number;
sort(l,l+n,cmp1);//将防晒霜从小到大排序
sort(cow,cow+m,cmp);//将牛能承受的最小值从小到大排序
priority_queue<int, vector<int>,greater<int> >q;//存储牛能承受的防晒霜的最大值
int ans=,j=;
for(int i=; i<n; i++)//枚举防晒霜
{
while(j<m&&cow[j].begin<=l[i].spf)//如果牛能承受的最小值小于防晒霜的值,将牛能承受的最大值入优先队列
{
q.push(cow[j].end);
j++;
}
while(!q.empty()&&l[i].number)//从小到大出队,将防晒霜给牛用,直到这种防晒霜用完。
{
int cnt=q.top();
q.pop();
if(cnt>=l[i].spf)
{
ans++;
l[i].number--;
}
}
}
printf("%d",ans);
//cout<<ans; }
/*
5 3
3 10
2 5
4 8
4 6
3 5
7 1
9 1
6 2
*/

  

POJ3614 Sunscreen 优先队列+贪心的更多相关文章

  1. poj3614 Sunscreen(贪心+STL)

    https://vjudge.net/problem/POJ-3614 如果这不是优先队列专题里的,我可能不一定能想到这么做. 结构体命名得有点不好,解题中看着Edge这个不恰当的命名,思路老是断掉. ...

  2. POJ--3614 Sunscreen(贪心)

    题目 3614 Sunscreen 2500*2500直接排序暴力贪心 #include<iostream> #include<cstring> #include<alg ...

  3. POJ 3614 Sunscreen 优先队列 贪心

    题意 有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值,太大就晒伤了,太小奶牛没感觉. 而刚开始的阳光的强度非常大,奶牛都承受不住 ...

  4. poj3614 Sunscreen【贪心】

    Sunscreen Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11772   Accepted: 4143 Descri ...

  5. 最高的奖励 - 优先队列&贪心 / 并查集

    题目地址:http://www.51cpc.com/web/problem.php?id=1587 Summarize: 优先队列&贪心: 1. 按价值最高排序,价值相同则按完成时间越晚为先: ...

  6. POJ2431 优先队列+贪心 - biaobiao88

    以下代码可对结构体数组中的元素进行排序,也差不多算是一个小小的模板了吧 #include<iostream> #include<algorithm> using namespa ...

  7. hdu3438 Buy and Resell(优先队列+贪心)

    Buy and Resell Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  8. [POJ3614]Sunscreen (贪心)

    题意 (依然来自洛谷) 有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值,太大就晒伤了,太小奶牛没感觉. 而刚开始的阳光的强度非常 ...

  9. POJ3614 Sunscreen 贪心入门

    题目大意 给出一些区间和一些点,一个点如果在一个区间内,那么此两者可以匹配.问匹配数最大是多少. 题解 这样的题我们一般都是站在区间上去找与其配对的点.我们可以得到如下性质: 对于一段区间\([l_1 ...

随机推荐

  1. ecshop 商品分类页 取得当前分类下的子分类方法

    ecshop的商品分类页面category.php 下的分类,默认是取得所有同级父分类以及父类别的子分类.比如,我点击进入是A商品分类的页面 category.php?id=1,事实上 我只需要取得父 ...

  2. zepto的使用方法

    有些不了解zepto的同学在刚接触的时候肯定有很多疑惑,这个东西怎么用啊,去哪里下载啊,什么时候该用什么时候不该用啊,其实我以前也是这样的.jquery使用多了那么就让我们一起来了解下zepto把. ...

  3. 一起学习c++11——c++11中的新语法

    c++11新语法1: auto关键字 c++11 添加的最有用的一个特性应该就是auto关键字. 不知道大家有没有写过这样的代码: std::map<std::string, std::vect ...

  4. 3.ubuntu如何安装搜狗输入法

    1.http://blog.csdn.net/qq_21792169/article/details/53152700 2.http://jingyan.baidu.com/article/54b6b ...

  5. 7.modifier插件的自定义和使用

    1.在plugins下面创建一个文件 modifier.changeDate.php 编写: <?php function smarty_modifier_changeDate($utime,$ ...

  6. KVO底层实现原理,仿写KVO

    这篇文章简单介绍苹果的KVO底层是怎么实现的,自己仿照KVO的底层实现,写一个自己的KVO监听 #pragma mark--KVO底层实现 第一步:新建一个Person类继承NSObject Pers ...

  7. Linux之通配符

    前言:学习通配符有点为正则表达式打基础的感觉……之前学python有学过正则表达式,所以这篇博客学起来还是挺快的. 特殊符号 | #管道符,或者(正则) > #输出重定向 >> #输 ...

  8. Visual Studio 2017离线安装包下载、安装

    1. 首先下载在线安装exe,官网地址https://www.visualstudio.com/zh-hans/downloads/ 2. 运行CMD, 执行脚本 vs_enterprise.exe ...

  9. window.getSelection和document.selection

    window.getSelection和document.selection   IE9以下支持:document.selection IE9.Firefox.Safari.Chrome和Opera支 ...

  10. 【原】无脑操作:Windows 10 + MySQL 5.5 安装使用及免安装使用

    本文介绍Windows 10环境下, MySQL 5.5的安装使用及免安装使用 资源下载: MySQL安装文件:http://download.csdn.net/detail/lf19820717/9 ...