标签:
poj3614
题意:
有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值,太大就晒伤了,太小奶牛没感觉。而刚开始的阳光的强度非常大,奶牛都承受不住,然后奶牛就得涂抹防晒霜,防晒霜的作用是让阳光照在身上的阳光强度固定为某个值。那么为了不让奶牛烫伤,又不会没有效果。给出了L种防晒霜。每种的数量和固定的阳光强度也给出来了.每个奶牛只能抹一瓶防晒霜,最后问能够享受晒太阳的奶牛有几个。
分析:将奶牛按照可以忍受光强的最大值从小到大排序,然后用一个从小到大取数值的优先队列维护各种防晒霜即可。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 const int maxn=2502; 15 typedef struct p 16 { 17 int minx,mx; 18 }p; 19 p s[maxn]; 20 int vis[maxn]; 21 int c,l; 22 bool cmp(p a,p b) 23 { 24 return a.mx<b.mx; 25 } 26 int main() 27 { 28 while(cin>>c>>l) 29 { 30 for(int i=0;i<c;i++) 31 cin>>s[i].minx>>s[i].mx; 32 memset(vis,0,sizeof(vis)); 33 priority_queue<int,vector<int>, greater<int> > que; 34 for(int i=0;i<l;i++){ 35 int x,y; 36 scanf("%d%d",&x,&y); 37 for(int i=0;i<y;i++) 38 que.push(x); 39 } 40 sort(s,s+c,cmp); 41 int cnt=0; 42 while(!que.empty()){ 43 int t=que.top(); 44 que.pop(); 45 for(int i=0;i<c;i++){ 46 if(!vis[i]&&t>=s[i].minx&&t<=s[i].mx){ 47 vis[i]=1; cnt++; break; 48 } 49 } 50 } 51 cout<<cnt<<endl; 52 } 53 return 0; 54 }
标签:
原文地址:http://www.cnblogs.com/wolf940509/p/5467499.html