zoukankan      html  css  js  c++  java
  • Heap:Sunscreen(POJ 3614)

                    

                     晒太阳

      题目大意:一堆牛,为了避免晒太阳会灼烧自己,然后他们自己有自己的防晒指数(一个区间),防晒霜可以提高防晒因数SPF,大了不行小了不行,现在有一桶防晒霜,他们提供一定的SPF,但是最多可以提供k头牛使用,问你这堆防晒霜最多可以给多少头牛提供保护?

      大水题,我们用贪心就可以了,把防晒因数尽量给SPF_MIN大的用(还要比较SPF_MAX满足要求与否),就是建堆,然后不断贪心就可以了。

      

     1 #include <iostream>
     2 #include <functional>
     3 #include <algorithm>
     4 #include <queue>
     5 
     6 using namespace std;
     7 
     8 typedef struct cow_set_
     9 {
    10     int min_SPF;
    11     int max_SPF;
    12 }COWS;
    13 typedef struct lotion_set_
    14 {
    15     int SPF;
    16     int cover;
    17     bool operator < (const lotion_set_ &x) const //自定义比较函数
    18     {
    19         return SPF < x.SPF;//最大值优先
    20     }
    21 }Lotion;
    22 
    23 int fcomp(const void *a, const void *b)
    24 {
    25     if ((*(COWS *)a).min_SPF == (*(COWS *)b).min_SPF)
    26     {
    27         return (*(COWS *)b).max_SPF - (*(COWS *)a).max_SPF;
    28     }
    29     else
    30         return (*(COWS *)b).min_SPF - (*(COWS *)a).min_SPF;//由大到小排列
    31 }
    32 
    33 static COWS cows_set[2500];
    34 static bool used[2500];
    35 priority_queue<lotion_set_>que_lotion;
    36 
    37 void Search(const int);
    38 
    39 int main(void)
    40 {
    41     int cow_sum, lotion_sum;
    42     Lotion tmp;
    43 
    44     while (~scanf("%d%d", &cow_sum, &lotion_sum))
    45     {
    46         for (int i = 0; i < cow_sum; i++)
    47             scanf("%d%d", &cows_set[i].min_SPF, &cows_set[i].max_SPF);
    48         for (int i = 0; i < lotion_sum; i++)
    49         {
    50             scanf("%d%d", &tmp.SPF, &tmp.cover);
    51             que_lotion.push(tmp);
    52         }    
    53         qsort(cows_set, cow_sum, sizeof(COWS), fcomp);
    54         Search(cow_sum);
    55     }
    56     return 0;
    57 }
    58 
    59 void Search(const int cow_sum)
    60 {
    61     int ans = 0, tmp_cover;
    62     Lotion out;
    63     memset(used, 0, sizeof(used));
    64 
    65     while (!que_lotion.empty())
    66     {
    67         out = que_lotion.top(); que_lotion.pop();
    68         tmp_cover = out.cover;
    69         for (int j = 0; j < cow_sum && tmp_cover != 0; j++)
    70         {
    71             if (used[j]) continue;
    72             if (cows_set[j].max_SPF < out.SPF
    73                 || cows_set[j].min_SPF > out.SPF)
    74                 continue;
    75 
    76             used[j] = 1; ans++; tmp_cover--;
    77         }
    78     }
    79     printf("%d
    ", ans);
    80 }

    还有这一次用了STL的堆,不知道为什么STL的堆总是比我自己手动写的要慢一点,可能是因为STL要先要一片区域的原因

  • 相关阅读:
    关于Altium Designer的BOM,元件清单
    关于Altium Designer中的搜索图纸上的元件
    头文件的问题
    关于stm32加不进.h文件的问题
    【数论】——欧拉定理
    python matplotlib 多图像排列显示
    直方图均衡原理
    辐射度,辐照度,相机响应函数
    A = min(1, max(0, A))
    gamma校正
  • 原文地址:https://www.cnblogs.com/Philip-Tell-Truth/p/4912943.html
Copyright © 2011-2022 走看看