• luogu_P2887 [USACO07NOV]防晒霜Sunscreen


    https://www.luogu.org/problem/P2887

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

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

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

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

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


    贪心

    奶牛忍受的阳光强度区间按右端点升序排

    防晒霜按阳光强度升序排

    对于阳光强度区间按右端点升序排好的1-N个奶牛,尽量用可用的最小的阳光强度防晒霜满足

    因为要么奶牛x能用防晒霜y,而奶牛x+1不能用

    要么奶牛x能用防晒霜y,奶牛x+1也能用,但是若让奶牛x+1用了最后一个防晒霜y(如果不是最后一个那没影响),那么对于新增一个得到满足的奶牛,满足奶牛x的区间,比让奶牛x用了最后一个防晒霜y,满足奶牛x+1的区间要小

    #include<iostream>
    #include<cstdio>
    
    #define ri register int
    #define u int
    
    namespace fast {
    
        inline u in() {
            u x(0),f(1);
            char s=getchar();
            while(s<'0'||s>'9') {
                if(s=='-') {
                    f=-1;
                }
                s=getchar();
            }
            while(s>='0'&&s<='9') {
                x=(x<<1)+(x<<3)+s-'0';
                s=getchar();
            }
            return x*f;
        }
    
    }
    
    using fast::in;
    
    #define NN 2505
    
    #include<algorithm>
    
    namespace all {
    
        u C,L;
    
        struct node {
            u a,b;
        } a[NN],b[NN];
    
        inline bool cmp(const node &x,const node &y) {
            return x.b<y.b;
        }
    
        inline void solve() {
            C=in(),L=in();
            for(ri i(1); i<=C; ++i) {
                a[i].a=in(),a[i].b=in();
            }
            for(ri i(1); i<=L; ++i) {
                b[i].a=in(),b[i].b=in();
                std::swap(b[i].a,b[i].b);
            }
            std::sort(a+1,a+C+1,cmp);
            std::sort(b+1,b+L+1,cmp);
            u ans(0);
            for(ri i(1); i<=C; ++i) {
                for(ri j(1); j<=L&&b[j].b<=a[i].b; ++j) {
                    if(b[j].a&&b[j].b>=a[i].a) {
                        ans++,b[j].a--;
                        break;
                    }
                }
            }
            printf("%d",ans);
        }
    
    }
    
    int main() {
    
        //freopen("x.txt","r",stdin);
        all::solve();
    
    }
  • 相关阅读:
    二十八、线程安全
    一、JAVA内存区域与内存溢出异常
    一、SQLite学习
    排列问题
    2016年秋季个人阅读计划
    有向图强连通分量求解【转】
    《梦断代码》阅读笔记之五
    《梦断代码》阅读笔记之四
    软件工程个人总结
    《梦断代码》阅读笔记之三
  • 原文地址:https://www.cnblogs.com/ling-zhi/p/11736268.html
Copyright © 2020-2023  润新知