代码如下:
#include <bits/stdc++.h>
using namespace std;
int a[1000001],n,T,x,y,sum,ans,ma,mi;
int main(){
// freopen("P9692.txt", "r", stdin);
scanf("%d",&T);
for (int rrr=1;rrr<=T;rrr++){
scanf("%d",&n);
for (int i=1;i<=n;i++) {
scanf("%d%d",&x,&y);
a[x]+=y;
ma=max(ma,x);
sum+=y;
mi=min(mi,x);
}
sum/=2;
int j=0;
for (int i=ma;i>=mi;i--){
if (!a[i]) continue;
if (a[i]>=sum){
ans+=i*sum;
j+=sum;
break;
}
else{
ans+=a[i]*i;
sum-=a[i];
j+=a[i];
}
a[i]=0;
}
for (int i=mi;i<=ma;i++){
if (!a[i]) continue;
if (a[i]>=j){
ans-=i*j;
a[i]=0;
break;
}
else{
ans-=a[i]*i;
j-=a[i];
}
a[i]=0;
}
printf("%d\n",ans);
sum=x=y=ans=ma=0;
mi=1000000;
}
return 0;
}
第二个点就T了