zoukankan      html  css  js  c++  java
  • 110. 防晒

    原题链接:110. 防晒


    解题思路

    贪心+排序

    我们首先将奶牛可以承受的最小值,递减排序,也就是降序排列,然后将防晒霜固定的值,递减排序,还是降序排列.

    对于每一个头奶牛而言,当然是要选择目前来说满足条件的最差的防晒霜,什么最差的定义,就是选择满足奶牛条件的SPF最大的那一瓶防晒霜.

    注意:降序排序,保证对于每一头牛而言,它用的是,可以使用的最差的防晒霜,因为值越小的防晒霜,有可能让更多的牛使用.而升序排列,就恰好反了.

    样例代码

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <algorithm>
    #include <queue>
    using namespace std;
    
    #define MAXN 20000
    
    int n,m,ans;
    pair<int,int> cow[MAXN],lotion[MAXN];
    
    priority_queue<int> q;
    
    void process(){
            int i,i1;
            while(!q.empty()) q.pop();
            sort(cow,cow+n);
            sort(lotion,lotion+m);
            for(ans=i=i1=0;i<m;i++){
                    while((i1<n)&&(cow[i1].first<=lotion[i].first))
                            q.push(-cow[i1++].second);
                    while((!q.empty())&&(-(q.top())<lotion[i].first))
                            q.pop();
                    while((!q.empty())&&(lotion[i].second--)){
                            ans++;
                            q.pop();
                    }
            }
    }
    
    
    int main(){
            int i,j;
        freopen("tanning.in","r",stdin);
        freopen("tanning.out","w",stdout);
            scanf("%d%d",&n,&m);
            for(i=0;i<n;i++)
                    scanf("%d%d",&cow[i].first,&cow[i].second);
            for(i=0;i<m;i++)
                    scanf("%d%d",&lotion[i].first,&lotion[i].second);
            ans=0;
            process();
            printf("%d
    ",ans);
            return 0;
    }
    
  • 相关阅读:
    python类型转换
    手机抓包
    java容器collection的一些简单特点
    WIN7 如何将BAT文件附加到任务栏
    Android新权限机制 AppOps
    记录一写Android常用API
    关于java建立的的包import的问题
    Android组件安全
    查看字节码
    数据库分表之Mybatis+Mysql实践(含部分关键代码)
  • 原文地址:https://www.cnblogs.com/hnkjdx-ssf/p/14285399.html
Copyright © 2011-2022 走看看