Description
奶牛们计划着去海滩上享受日光浴。为了避免皮肤被阳光灼伤,所有
C(1<=C<=2500)
头奶牛必须在出门之前在身上抹防晒霜。第i头奶牛适合的最小和最 大的SPF值分别为
minSPFi
和
maxSPFi
(
1<=minSPFi<=1,000
;
minSPFi<=maxSPFi<=1,000
)。如果某头奶牛涂的防晒霜的SPF值过小,那么阳光仍然能 把她的皮肤灼伤;如果防晒霜的SPF值过大,则会使日光浴与躺在屋里睡觉变得 几乎没有差别。为此,奶牛们准备了一大篮子防晒霜,一共
L(1<=L<=2500)
瓶。第
i
瓶 防晒霜的SPF值为
Input
第1行: 2个用空格隔开的整数:
C
和
第2..
C+1
行: 第
i+1
行给出了适合第i头奶牛的SPF值的范围:
minSPFi
以及
maxSPFi
第
C+2
..
C+L+1
行: 第
i+C+1
行为了第i瓶防晒霜的参数:
SPFi
和
coveri
,两个 数间用空格隔开。
Output
第1行: 输出1个整数,表示最多有多少头奶牛能享受到日光浴
Sample Input
3 2
3 10
2 5
1 5
6 2
4 1
输入说明
一共有3头奶牛,2瓶防晒霜。3头奶牛适应的SPF值分别为3..10,2..5,以及1..5。2瓶防晒霜的SPF值分别为6(可使用2次)和4(可使用1次)。可能的分配方案为:奶牛1使用第1瓶防晒霜,奶牛2或奶牛3使用第2瓶防晒霜。显然,最多只有2头奶牛的需求能被满足。
Sample Output
2
HINT
Source
Gold
思路
先对每头牛按照最大SPF值排序,那么SPF值更大的防晒霜显然要分给最大SPF值更大的牛,最大SPF值更小的牛选择能满足它的最小的防晒霜即可。
代码
#include <cstdio>
#include <algorithm>
const int maxn=2500;
struct cow
{
int l,r;
bool operator <(const cow &other) const
{
return r<other.r;
}
};
struct scr
{
int lim,v;
bool operator <(const scr &other) const
{
return v<other.v;
}
};
cow w[maxn+10];
scr r[maxn+10];
int c,k,ans;
int main()
{
scanf("%d%d",&c,&k);
for(int i=1; i<=c; i++)
{
scanf("%d%d",&w[i].l,&w[i].r);
}
for(int i=1; i<=k; i++)
{
scanf("%d%d",&r[i].v,&r[i].lim);
}
std::sort(w+1,w+c+1);
std::sort(r+1,r+k+1);
for(int i=1; i<=c; i++)
{
int flag=0;
for(int j=1; j<=k; j++)
{
if((r[j].lim>0)&&(r[j].v>=w[i].l)&&(r[j].v<=w[i].r))
{
r[j].lim--;
flag=1;
break;
}
}
if(flag)
{
ans++;
}
}
printf("%d\n",ans);
return 0;
}