#include<bits/stdc++.h>
using namespace std;
struct shop
{
int a,b;
};
bool cmp(shop x,shop y)
{
return x.a<y.a;
}
int main()
{
int T;
cin>>T;int sum[T];
for(int i=0;i<T;i++)
{
int N,sale=0;
cin>>N;
shop sh[N];
for(int j=0;j<N;j++)
{
cin>>sh[j].a>>sh[j].b;
sale+=sh[j].b;
}
sort(sh,sh+N,cmp);
sale/=2;
int yisale=0,money=0;
for(int j=0;j<N;j++)
{
money-=sh[j].a*sh[j].b;
yisale+=sh[j].b;
if(yisale>=sale)
{
money+=(yisale-sale)*sh[j].a;
break;
}
}
yisale=0;
for(int j=N-1;j>=0;j--)
{
money+=sh[j].a*sh[j].b;
yisale+=sh[j].b;
if(yisale>=sale)
{
money-=(yisale-sale)*sh[j].a;
break;
}
}
sum[i]=money;
}
for(int i=0;i<T;i++)
{
cout<<sum[i]<<endl;
}
}
思路就是先把交易次数加起来除以二,一般用来从低往高买进,另一半从高往低卖出,可是答案是错的……