标签:
题目大意:奶牛美容:有C头奶牛日光浴,每头奶牛分别需要minSPF_i和maxSPF_i单位强度之间的阳光。现有L种防晒霜,分别能使阳光强度稳定为SPF_i,
其瓶数为cover_i。求最多满足多少头奶牛
贪心策略:现将奶牛的需求从小到大排列,防晒霜也这样排列,依次判断奶牛能否被防晒霜涂上,这样保证给了奶牛满足条件的最小需求。
1 #include <iostream> 2 #include <algorithm> 3 #include <queue> 4 #include <functional> 5 using namespace std; 6 7 pair<int, int> cow[2500 + 16]; 8 pair<int, int> bottle[2500 + 16]; 9 priority_queue<int, vector<int>, greater<int> > q; // 优先级队列,小元素优先出队 10 11 ///////////////////////////SubMain////////////////////////////////// 12 int main() 13 { 14 int C, L; 15 cin >> C >> L; 16 for (int i = 0; i < C; ++i) 17 { 18 cin >> cow[i].first >> cow[i].second; 19 } 20 for (int i = 0; i < L; ++i) 21 { 22 cin >> bottle[i].first >> bottle[i].second; 23 } 24 sort(cow, cow + C); 25 sort(bottle, bottle + L); 26 int cur = 0; // 现在正等待涂防晒霜的奶牛的index 27 int result = 0; 28 for (int i = 0; i < L; ++i) 29 { 30 //只要奶牛非空并满足最小要求继续循环 31 while (cur < C && cow[cur].first <= bottle[i].first) 32 { 33 q.push(cow[cur].second); 34 ++cur; 35 } 36 37 while (!q.empty() && bottle[i].second) 38 { 39 int maxSPF = q.top(); q.pop(); 40 // “奶牛上限”比这一瓶的上限大,说明这头奶牛可以被涂上防晒霜 41 if (maxSPF >= bottle[i].first) 42 { 43 ++result; 44 --bottle[i].second; 45 } 46 // else 这头奶牛不能被涂上,因为bottle是按SPF排过序的,没有比这瓶更小的SPF了 47 } 48 } 49 cout << result << endl; 50 51 return 0; 52 }
标签:
原文地址:http://www.cnblogs.com/xlsryj/p/4901683.html