[Usaco2007 Nov]tanning分配防晒霜

来源:互联网 发布:移动宽带网络维修电话 编辑:程序博客网 时间:2024/04/28 17:29

Description
奶牛们计划着去海滩上享受日光浴。为了避免皮肤被阳光灼伤,所有C(1<=C<=2500)头奶牛必须在出门之前在身上抹防晒霜。第i头奶牛适合的最小和最 大的SPF值分别为minSPFimaxSPFi(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个用空格隔开的整数:CL
第2..C+1行: 第i+1行给出了适合第i头奶牛的SPF值的范围:minSPFi以及 maxSPFi
C+2..C+L+1行: 第i+C+1行为了第i瓶防晒霜的参数:SPFicoveri,两个 数间用空格隔开。

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;}
阅读全文
0 0
原创粉丝点击