点击这里查看原题
将所有机器和任务按x由大到小排序,若x相同则按y由大到小排序。
对每个任务,从所有时间大于等于它的机器中选择能力最小的去执行这个任务。
/*
User:Small
Language:C++
Problem No.:4864
*/
#include<bits/stdc++.h>
#define ll long long
#define inf 999999999
using namespace std;
const int M=1e5+5;
int n,m,tot,c[105];
ll ans;
struct no{
int t,l;
}e[M],f[M];
bool cmp(no a,no b){
return a.t==b.t?a.l>b.l:a.t>b.t;
}
void init(){
tot=ans=0;
memset(c,0,sizeof(c));
}
void solve(){
init();
for(int i=1;i<=n;i++)
cin>>e[i].t>>e[i].l;
for(int i=1;i<=m;i++)
cin>>f[i].t>>f[i].l;
sort(e+1,e+n+1,cmp);
sort(f+1,f+m+1,cmp);
for(int i=1,j=1;i<=m;i++){
while(j<=n&&e[j].t>=f[i].t){
c[e[j].l]++;
j++;
}
for(int k=f[i].l;k<=100;k++){
if(c[k]){
tot++;
c[k]--;
ans+=500*f[i].t+2*f[i].l;
break;
}
}
}
cout<<tot<<' '<<ans<<endl;
}
int main(){
freopen("data.in","r",stdin);//
ios::sync_with_stdio(0);
while(cin>>n>>m) solve();
return 0;
}