题目
题解思路
对于每只鹅,我们尽可能的选择接近的防晒霜。
也就是,让鹅的min和防晒霜升序排列,然后研究每个防晒霜对于鹅,符合最小值的,将其的max值加入队列,从小到大出队。让防晒霜物尽其用。
AC代码
#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
struct node
{
int ma,mi;
}a[10000];
struct node1
{
int w,s;
}k[10000];
bool cmp (node A,node B)
{
return A.mi < B.mi ;
}
bool cmp1 (node1 A , node1 B)
{
return A.w < B.w;
}
int main ()
{
priority_queue<int, vector<int>, greater<int> > q;
int n,m;
cin>>n>>m;
for (int i = 1 ; i <= n ; i++ )
{
int t1,t2;
cin>>t1>>t2;
a[i].mi = t1;
a[i].ma = t2;
}
for (int i = 1 ; i <= m ; i++ )
{
int t1,t2;
cin>>t1>>t2;
k[i].w = t1;
k[i].s = t2;
}
sort(a+1,a+1+n,cmp);
sort(k+1,k+1+m,cmp1);
int pit = 1,ans = 0 ;
for (int i = 1 ; i <= m ; i++ )
{
while(pit <= n && a[pit].mi <= k[i].w )
{
q.push(a[pit].ma);
pit++;
}
while(!q.empty()&&k[i].s > 0)
{
if (q.top() >= k[i].w )
{
k[i].s--;
ans++;
}
q.pop();
}
}
cout<<ans<<"\n";
return 0;
}