BZOJ 2465: [中山市选2009]小球
难度在于读题
#include<cstdio>
#include<algorithm>
using namespace std;
int a[1000005];
struct node{
int c,val;
}e[1000005];
bool cmp(node a,node b){
return a.val>b.val;
}
int main(){
while (1){
int n,m;
scanf("%d%d",&n,&m);
if (n==0 && m==0) break;
for (int i=1; i<=n; i++) scanf("%d",&a[i]);
sort(a+1,a+n+1);
for (int i=1; i<=m; i++) scanf("%d%d",&e[i].c,&e[i].val);
sort(e+1,e+m+1,cmp);
int ans=0,ANS=0,top=1;
for (int i=n; i>=1; i--){
while (top<=m && !e[top].c) top++;
if (top<=m && a[i]<=e[top].val){
e[top].c--;
ans++;
ANS+=a[i];
}
}
printf("%d %d\n",ans,ANS);
}
return 0;
}

浙公网安备 33010602011771号