• POJ :3614-Sunscreen


    传送门:http://poj.org/problem?id=3614

    Sunscreen

    Time Limit: 1000MS Memory Limit: 65536K
    Total Submissions: 10136 Accepted: 3544

    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; minSPFi ≤ maxSPFi ≤ 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 require

    s 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


    解题心得:

    1. 题意就是奶牛要去日光浴,奶牛要涂防晒霜,每个奶牛有一个涂防晒霜的区间,每个防晒霜有一个值和数量,问最多可以涂多少只奶牛。
    2. 其实面对的最大的问题就是一个奶牛将可以用多个防晒霜,但是它用了其中一个和另一个奶牛产生冲突的防晒霜,所以可以将防晒霜按照值排序,每次取一个出来,将最小值小于这个防晒霜的奶牛都压入优先队列(按照终点排序),再从优先队列中来取。这样就能先安排好奶终点先结束的奶牛。

    #include <stdio.h>
    #include <queue>
    #include <algorithm>
    using namespace std;
    
    const int maxn = 2510;
    typedef pair <int,int> P;
    
    P cow[maxn],co[maxn];
    int n,m;
    
    int main() {
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
            scanf("%d%d",&cow[i].first,&cow[i].second);
        for(int i=0;i<m;i++)
            scanf("%d%d",&co[i].first,&co[i].second);
    
        sort(cow,cow+n);
        sort(co,co+m);
    
        priority_queue <int, vector<int> , greater <int> > qu;
        int j = 0,ans = 0;
        for(int i=0;i<m;i++) {
            while(j<n && cow[j].first <= co[i].first) {
                qu.push(cow[j].second);
                j++;
            }
    
            while(!qu.empty() && co[i].second) {
                if(qu.top() >= co[i].first) {
                    ans++;
                    co[i].second--;
                }
                qu.pop();
            }
        }
    
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    python的paramiko模块简单应用
    python单线程下实现多个socket并发
    python之协程
    python之生产者消费者模型
    python进程之间修改数据[Manager]与进程池[Pool]
    python的进程间的数据交互
    vmware搭建vSAN提示磁盘不合格或者看不到磁盘的解决办法
    python之多并发socket
    OOP的几个不常用的方法
    HTTP 头和 PHP header() 函数
  • 原文地址:https://www.cnblogs.com/GoldenFingers/p/9107141.html
Copyright © 2020-2023  润新知