POJ 3614 Sunscreen 优先队列

2014-11-24 12:17:40 · 作者: · 浏览: 0

题目大意:

给你一些母牛,母牛有能容忍日光浴的最小和最大光照强度。每只母牛可以涂一次SPF,SPF可以将母牛可以承受的光照强度固定在某个地方。现在给你母牛的最小和最大值和不同的spf的光照强度及其数量,求最多可以有多少母牛享受日光浴?

思路:

优先队列。

先按母牛最小承受的排好,然后spf的值也从小到大。

接下来用优先队列(栈顶为最小的)。对于每个spf,如果一只母牛的最小值小于等于spf则将其最大值入队。(贪心。。如两个母牛一只【1,4】一只【1,5】那么同样情况下选【1,4】不会差于【1,5】)

详见代码。

#include
  
   
#include
   
     #include
    
      #include
     
       using namespace std; const int MAXN=2500+10; struct cow { int min,max; bool operator < (const cow& x)const{ return min
      
        x.val; } }; priority_queue
       
         q; int main() { int c,l; while(~scanf(%d%d,&c,&l)) { while(!q.empty()) q.pop(); for(int i=0;i