标签:style blog http io color ar os sp for
题意:转自http://blog.csdn.net/sdj222555/article/details/10698641
有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值,太大就晒伤了,太小奶牛没感觉。
而刚开始的阳光的强度非常大,奶牛都承受不住,然后奶牛就得涂抹防晒霜,防晒霜的作用是让阳光照在身上的阳光强度固定为某个值。
那么为了不让奶牛烫伤,又不会没有效果。
给出了L种防晒霜。每种的数量和固定的阳光强度也给出来了
每个奶牛只能抹一瓶防晒霜,最后问能够享受晒太阳的奶牛有几个。
思路: 贪心加优先队列,牛按小值排序,防晒霜按spf值排序,然后每次一个防晒霜,就把可以的牛加入优先队列,然后每次取出牛的时候,取出右值尽量小的即可
代码:
#include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; const int N = 2505; int c, l; struct SPF { int l, r; void read() { scanf("%d%d", &l, &r); } bool operator < (const SPF &c) const { return r > c.r; } } spf[N], spf2[N]; bool cmp(SPF a, SPF b) { return a.l < b.l; } int main() { while (~scanf("%d%d", &c, &l)) { for (int i = 0; i < c; i++) spf[i].read(); sort(spf, spf + c, cmp); for (int i = 0; i < l; i++) spf2[i].read(); sort(spf2, spf2 + l, cmp); int u = 0; priority_queue<SPF> Q; int ans = 0; for (int i = 0; i < l; i++) { while (u < c && spf[u].l <= spf2[i].l) Q.push(spf[u++]); while (!Q.empty() && spf2[i].r) { int tmp = Q.top().r; Q.pop(); if (tmp < spf2[i].l) continue; spf2[i].r--; ans++; } } printf("%d\n", ans); } return 0; }
标签:style blog http io color ar os sp for
原文地址:http://blog.csdn.net/accelerator_/article/details/40872425