思路:
一开始想的就是让SPF小的防晒霜给maxSPF小的牛,思路是对的,可是自己用模拟写的,有bug!这题和活动安排一类的题目好像好像~~~
代码:
// WA代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int Max_n=3000;
int c,l;
struct cow{
int a,b;
bool operator<(const cow& c)const {
if(b!=c.b)return b<c.b;
return a<c.a;
}
}co[Max_n];
struct lotion{
int a,b;
bool operator<(const lotion& l)const {
return a<l.a;
}
}lo[Max_n];
int main()
{
scanf("%d%d",&c,&l);
for(int i=0;i<c;i++)scanf("%d%d",&co[i].a,&co[i].b);
for(int i=0;i<l;i++)scanf("%d%d",&lo[i].a,&lo[i].b);
sort(co,co+c);
sort(lo,lo+l);
int i=0,j=0,sum=0;
while(i<c&&j<l){
if(!lo[j].b||lo[j].a<co[i].a)j++;
else if(lo[j].a>co[i].b)i++;
else {
sum++;i++;
lo[j].b--;
}
}
printf("%d\n",sum);
return 0;
}
// 2 1
// 4 5
// 1 6
// 1 1
//AC代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int Max_n=3000;
int c,l;
struct cow{
int a,b;
bool operator<(const cow& c)const {
if(a!=c.a)return a<c.a;
return b<c.b;
}
}co[Max_n];
struct lotion{
int a,b;
bool operator<(const lotion& l)const {
return a<l.a;
}
}lo[Max_n];
int main()
{
scanf("%d%d",&c,&l);
for(int i=0;i<c;i++)scanf("%d%d",&co[i].a,&co[i].b);
for(int i=0;i<l;i++)scanf("%d%d",&lo[i].a,&lo[i].b);
sort(co,co+c);
sort(lo,lo+l);
int sum=0,i=0;
priority_queue<int,vector<int>,greater<int> >que;
for(int j=0;j<l;j++){
while(i<c&&co[i].a<=lo[j].a){
que.push(co[i].b);
i++;
}
while(!que.empty()&&lo[j].b){
int f=que.top();que.pop();
if(f>=lo[j].a){
sum++;lo[j].b--;
}
}
}
printf("%d\n",sum);
return 0;
}