zoukankan      html  css  js  c++  java
  • ACM题目————Sunscreen

    Description

    To avoid unsightly burns while tanning, each of the C (1 ≤ C ≤ 2500) cows must cover her hide with sunscreen when they're at the beach. Cow i has a minimum and maximum SPF rating (1 ≤ minSPFi ≤ 1,000; minSPFimaxSPFi ≤ 1,000) that will work. If the SPF rating is too low, the cow suffers sunburn; if the SPF rating is too high, the cow doesn't tan at all........

    The cows have a picnic basket with L (1 ≤ L ≤ 2500) bottles of sunscreen lotion, each bottle i with an SPF rating SPFi (1 ≤ SPFi ≤ 1,000). Lotion bottle i can cover coveri cows with lotion. A cow may lotion from only one bottle.

    What is the maximum number of cows that can protect themselves while tanning given the available lotions?

    Input

    * Line 1: Two space-separated integers: C and L
    * Lines 2..C+1: Line i describes cow i's lotion requires with two integers: minSPFi and maxSPFi
    * Lines C+2..C+L+1: Line i+C+1 describes a sunscreen lotion bottle i with space-separated integers: SPFi and coveri

    Output

    A single line with an integer that is the maximum number of cows that can be protected while tanning

    Sample Input

    3 2
    3 10
    2 5
    1 5
    6 2
    4 1

    Sample Output

    2

    题意

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

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

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

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

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

    可以将奶牛按照阳光强度的最小值从小到大排序。

    将防晒霜也按照能固定的阳光强度从小到大排序


    从最小的防晒霜枚举,将所有符合  最小值小于等于该防晒霜的 奶牛的 最大值 放入优先队列之中。

    然后优先队列是小值先出

    所以就可以将这些最大值中的最小的取出来。更新答案。

    #include <iostream>
    #include <algorithm>
    #include <queue>
    
    using namespace std;
    typedef pair<int,int> p;
    priority_queue <int, vector<int>, greater<int> > q;
    //定义优先队列,小的先出队
    p n[2505], b[2505];
    
    bool cmp(p x, p y)//按pair类的第一个值排序
    {
        return x.first<y.first;
    }
    
    int main()
    {
        int C, L, sum;
        cin >> C >> L ;
        for(int i=0; i<C; i++)
            cin >> n[i].first >> n[i].second ;
        for(int i=0; i<L; i++)
            cin >> b[i].first >> b[i].second ;
        sort(n,n+C,cmp);
        sort(b,b+L,cmp);
        int j = 0 ;
        sum = 0 ;
        for(int i=0; i<L; i++)
        {
            while( j<C && n[j].first<=b[i].first)
            {
                q.push(n[j].second);
                j++ ;
            }
            while(!q.empty() && b[i].second)
            {
                int temp = q.top() ;
                q.pop();
                if(temp < b[i].first) continue ;
                sum ++ ;
                b[i].second -- ;
            }
        }
        cout << sum << endl ;
    
        return 0;
    }
    
    低调做人,高调做事。
  • 相关阅读:
    加州大学Santa Barbara量化课程
    专利分析与申请(2):SILK 专利的特点
    两种可分级语音编码器的量化器
    芬兰赫尔辛基工业大学DirAC工程:Directional audio coding
    SILK 的 Delay Decision 和 Dither
    Fraunhofer 研究院
    ICASSP 论文发表相关问题
    SILK 学习总结之位分配与低码率编码
    今天测试VOIP软件结果
    国内部分音频语音相关研究企业(实时更新)
  • 原文地址:https://www.cnblogs.com/Asimple/p/5487286.html
Copyright © 2011-2022 走看看