• POJ3614 [USACO07NOV]防晒霜Sunscreen


    Sunscreen
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 9333   Accepted: 3264

    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

    Source

     
    【题解】
    把min从大到小排序,然后对于每个区间,放最大的SPF。分情况讨论两个区间的先后位置可得证,证明显然。
    还可用二分图最大匹配做。
     
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <string>
     5 #include <algorithm>
     6 
     7 const int INF = 0x7fffffff;
     8 const int MAXN = 2500 + 10; 
     9 
    10 inline void read(int &x)
    11 {
    12     x = 0;char ch = getchar(),c = ch;
    13     while(ch < '0' || ch > '9')c = ch, ch = getchar();
    14     while(ch <= '9' && ch >= '0')x = x * 10 + ch - '0', ch = getchar();
    15     if(c == '-')x = -x;
    16 }
    17 
    18 int l[MAXN], r[MAXN], cnt[MAXN], point[MAXN], num[MAXN], cntt[MAXN], C, L, ans;
    19 
    20 bool cmp(int a, int b)
    21 {
    22     return l[a] > l[b];
    23 }
    24 
    25 bool cmpp(int a, int b)
    26 {
    27     return point[a] > point[b];
    28 }
    29 
    30 int main()
    31 {
    32     //freopen("data.txt", "r", stdin);
    33     read(C),read(L);
    34     for(register int i = 1;i <= C;++ i) read(l[i]), read(r[i]), cnt[i] = i;
    35     for(register int i = 1;i <= L;++ i) read(point[i]), read(num[i]), cntt[i] = i;
    36     std::sort(cnt + 1, cnt + 1 + C, cmp);
    37     std::sort(cntt + 1, cntt + 1 + L, cmpp);
    38     for(register int i = 1;i <= C;++ i)
    39     {
    40         for(register int j = 1;j <= L;++ j)
    41             if(num[cntt[j]] > 0 && r[cnt[i]] >= point[cntt[j]] && l[cnt[i]] <= point[cntt[j]])
    42             {
    43                 --num[cntt[j]], ++ ans;
    44                 break;
    45             }
    46             else if(l[cnt[i]] > point[cntt[j]] ) break;
    47     }
    48     printf("%d", ans);
    49     return 0;
    50 }
    POJ3614
  • 相关阅读:
    cpu_relax
    x86汇编寄存器,函数参数入栈说明
    内核调试打印dump_stack
    内核模块中计算执行时间
    js
    JS解析+预解析相关总结
    github-如何设置SSH Key
    块级元素与行内元素的区别
    编写高质量代码——html、css、javascript
    jquery——简单的下拉列表制作及bind()方法的示例
  • 原文地址:https://www.cnblogs.com/huibixiaoxing/p/7323675.html
Copyright © 2020-2023  润新知