您的位置:首页 > 编程语言 > C语言/C++

[Usaco2007 Nov]tanning分配防晒霜

2017-09-26 17:08 295 查看
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值为SPFi(1<=SPFi<=1,000)。瓶子的大小也不一定相同,第i 瓶防晒霜可供coveri头奶牛使用。当然,每头奶牛只能涂某一个瓶子里的防晒霜 ,而不能把若干个瓶里的混合着用。 请你计算一下,如果使用奶牛们准备的防晒霜,最多有多少奶牛能在不被灼 伤的前提下,享受到日光浴的效果?

Input

第1行: 2个用空格隔开的整数:C和L

第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;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言