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; minSPFimaxSPFi ≤ 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 Input

3 2
3 10
2 5
1 5
6 2
4 1

Sample Output

2

题意:有C头牛,每个牛都有对阳光的承受空间【minspf,maxspf】,有L种防晒霜,每种都有SPF值和瓶数,涂到牛身上可使其只收到SPF值的阳光,每瓶只可涂一头牛,问最多几只牛可以享受阳光?

思路:
此题可以看成在一个数轴上操作。

图中矩形块就代表了牛的承受区间,我们从左到右对牛进行涂防晒霜处理,可以从图中看到,

①【0,1】位置,无牛需要防晒霜

②【1,4】位置,只有一头牛有需求,那我们直接给橙色涂

④【4,5】位置,红色牛和橙色牛都有需求,给哪只牛涂呢?

有人可能说了,前面都给橙色牛涂了,现在肯定给红色啦,对,但是如果在【4,5】之前没有防晒霜呢(就一瓶防晒霜在【4,5】位置),也就是说这瓶防晒霜面临两个选择,

我们从图中看出,那肯定也是给红色牛啦,因为红色牛快承受不住啦(该牛承受区间右边界小),也就是说再往下进行的话,马上就出了红牛的承受区间了,然而橙牛却还没有,

所以我们先给红牛,之后再瞅瞅有没有适合橙牛的。

这样就可以看出我们的策略:

①将牛按右边界从小到大排序,防晒霜按spf从小到大排序

②将牛按左边界从大到小排序,防晒霜按spf从大到小排序

回头看这问题,对于排好序的牛(假设按①方式),有两瓶防晒霜x>y,那么是选x的,因为x,y对于后面的牛来说有三种情况,

①x、y可选

②x不可选,y可选

③x、y不可选(由左边界影响)

那么我们选择小的就对后面的牛来说影响最小

并且因为选择了对后面牛最小的影响方式,该牛可以选择防晒霜,就没有必要留给下头牛,因为只算牛头数,哪头牛不是牛呢

 #include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std; int C,L; struct Node
{
int l;
int r;
} cow[],sun[]; bool cmp1(Node a,Node b)
{
return a.l < b.l;
}
bool cmp2(Node a,Node b)
{
return a.r < b.r;
} int main()
{
scanf("%d%d",&C,&L);
for(int i=; i<=C; i++)
{
scanf("%d%d",&cow[i].l,&cow[i].r);
}
for(int i=; i<=L; i++)
{
scanf("%d%d",&sun[i].l,&sun[i].r);
}
sort(cow+,cow++C,cmp2);
sort(sun+,sun++L,cmp1);
int ans = ;
for(int i=; i<=C; i++)
{
for(int j=; j<=L; j++)
{
if(cow[i].l <= sun[j].l && cow[i].r >= sun[j].l && sun[j].r)
{
ans++;
sun[j].r--;
break;
}
}
}
printf("%d\n",ans);
}

优先队列写法:

 #include<bits/stdc++.h>
using namespace std; int C,L;
struct Node
{
int l;
int r;
bool operator<(Node b)
{
return l < b.l;
}
} cow[],sun[];
priority_queue<int,vector<int>,greater<int> >que;
int main()
{
scanf("%d%d",&C,&L);
for(int i=; i<=C; i++)
scanf("%d%d",&cow[i].l,&cow[i].r);
for(int i=; i<=L; i++)
scanf("%d%d",&sun[i].l,&sun[i].r);
sort(cow+,cow++C);
sort(sun+,sun++L);
int j = ;
int ans = ;
for(int i=; i<=L; i++)
{
while(j<=C&&cow[j].l <= sun[i].l)
que.push(cow[j].r),j++;
while(!que.empty() && sun[i].r)
{
int tmp = que.top();
que.pop();
if(tmp >= sun[i].l)
ans++,sun[i].r--;
}
}
printf("%d\n",ans);
}

												

Sunscreen POJ - 3614(贪心)的更多相关文章

  1. Heap:Sunscreen(POJ 3614)

    晒太阳 题目大意:一堆牛,为了避免晒太阳会灼烧自己,然后他们自己有自己的防晒指数(一个区间),防晒霜可以提高防晒因数SPF,大了不行小了不行,现在有一桶防晒霜,他们提供一定的SPF,但是最多可以提供k ...

  2. POJ 3614 Sunscreen 贪心

    题目链接: http://poj.org/problem?id=3614 Sunscreen Time Limit: 1000MSMemory Limit: 65536K 问题描述 to avoid ...

  3. poj -3614 Sunscreen(贪心 + 优先队列)

    http://poj.org/problem?id=3614 有c头奶牛在沙滩上晒太阳,每头奶牛能忍受的阳光强度有一个最大值(max_spf) 和最小值(min_spf),奶牛有L种防晒霜,每种可以固 ...

  4. 【POJ 3614 Sunscreen】贪心 优先级队列

    题目链接:http://poj.org/problem?id=3614 题意:C头牛去晒太阳,每头牛有自己所限定的spf安全范围[min, max]:有L瓶防晒液,每瓶有自己的spf值和容量(能供几头 ...

  5. POJ 3614:Sunscreen 贪心+优先队列

    Sunscreen Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5378   Accepted: 1864 Descrip ...

  6. POJ 3614 Sunscreen(贪心,区间单点匹配)

    把牛的SPF看作一个区间,防晒霜看作点.一个点可以匹配C[i]次,问最大匹配数.可以用图论做. 也可以贪心.贪心的思想是,把区间和点排序以后,考虑最左边的点,加入和这个点相交的区间, 并排除出界的区间 ...

  7. POJ 3614 Sunscreen 优先队列 贪心

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

  8. poj 3614 Sunscreen

                                                                                                        ...

  9. 【POJ 3614】 Sunscreen

    [题目链接] http://poj.org/problem?id=3614 [算法] 将MinSPF从大到小排序,每头牛找SPF值最大的防晒霜 [代码] #include <algorithm& ...

随机推荐

  1. jenkins 安装网址

    https://wiki.jenkins.io/display/JENKINS/Installing+Jenkins

  2. Confluence 6 高级性能诊断

    请在你的系统服务请求中包括下面所有的信息,如果可能的话,你也可以在请求中包括你认为最有可能出现的问题.这样的话,可以避免我们进一步对你系统的问题进行询问. 系统信息 Confluence 服务器 你系 ...

  3. Confluence 6 新安装配置数据库字符集编码

    Confluence 和你的数据库必须配置使用相同的字符集. Confluence 使用 UTF-8 字符集编码,所以你的数据库也必须配置为使用 UTF-8 (或者与 UTF-8 相同的编码,例如在 ...

  4. HTML5 缓存: cache manifest

    ---恢复内容开始--- 1:MIME TYPE:text/cache-manifest 服务器配置MIME类型2:需要由你创建的:NAME.manifest 创建manifest文件3:给 < ...

  5. Penetration testing _internal & wireless Penetration Testing

    第一部分 渗透测试步骤 ---参考资料  Ethical Hacking: The Value of Controlled Penetration Tests  下载地址  链接:https://pa ...

  6. antDesign 使用Form并进行表单验证

    import React from 'react'; import {Form,Input,Select,Button ...} from 'antd'; class PageName extends ...

  7. Vue-CLI 3.x 设置反向代理

    最近在项目中使用了Vue CLI 3.0版本,项目中需要设置反向代理解决跨域问题,下面记录一下设置过程. 新建配置文件 (vue-cli3.x 官网的配置文档 https://cli.vuejs.or ...

  8. 一道面试题 vuex缺点?

    最近去面试的时候,面试官有一道题是让我阐述用vuex的优缺点,优点倒还好说,这个缺点还真没有认识到,有道友可以帮忙解惑嘛? 2 回答 慕标5265247 这种问题一般都有通用回答套路.一件挺好的东西, ...

  9. 如何在EXCEL中找出第一列中不包含的第二列数据

    1.找出第一列中不包含的第二列数据:=IFERROR(VLOOKUP(A:A,B:B,1,0),"无") 2.A列相同,B列相加:=SUMIF(G:G,G1,J:J)

  10. C++ 内链接 外链接

    编译的时候(假如编译器是VS),是以源文件cpp文件为单位,编译成一个个的obj文件,然后再通过链接器把不同的obj文件链接起来.如果一些变量或函数的定义是内连接的话,链接器链接的时候就不会拿它们去与 ...