码迷,mamicode.com
首页 > 其他好文 > 详细

5月6日

时间:2016-05-07 00:48:40      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

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 }
View Code

 

5月6日

标签:

原文地址:http://www.cnblogs.com/wolf940509/p/5467499.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!