哎,真有点悲剧,以前学长交的数据结构的写法,没有学会,要不然这道题就写出来了,
思路很清晰,就是这种写法不是很熟,这次总算学会了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
struct Node
{
int tim,k,value;
}a[100008];
bool cmp(Node a,Node b)
{
return a.tim>b.tim||(a.tim == b.tim && a.k>b.k);
}
vector <int> v[108];
int main()
{
int n,m,s,t;
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<=100;i++)
v[i].clear();
for(int i=0;i<n;i++)
{
scanf("%d%d",&s,&t);
v[t].push_back(s);
}
for(int i=0;i<m;i++)
scanf("%d%d",&a[i].tim,&a[i].k);
sort(a,a+m,cmp);
for(int i=0;i<=100;i++)
{
if(!v[i].empty())
{
sort(v[i].begin(),v[i].end());
}
}
int ans = 0;
__int64 sum = 0;
for(int i=0;i<m;i++)
{
for(int j=a[i].k;j<=100;j++)
{
if(!v[j].empty() && *(v[j].end()-1) >= a[i].tim)
{
int x = lower_bound(v[j].begin(),v[j].end(),a[i].tim) - v[j].begin() ;
sum += 500 * a[i].tim + 2* a[i].k;
ans++;
v[j].erase(v[j].begin()+ x);
break;
}
}
}
printf("%d %I64d\n",ans,sum);
}
}