PKU 3262 Protecting the Flowers

http://poj.org/problem?id=3262
牛がn匹いる。この牛はその場に居ると花を食べてしまうので、元の場所に戻したい。
i番目の牛はもとの場所に戻すのに、行きと帰りでTi*2分かかり、その場に居ると1分間にDi本の花を食べてしまう。牛は1匹ずつしか戻せない。
すべての牛を元の場所に戻す間に食べられてしまう最小の花の数を求めろというような問題。

ある2頭の牛のどちらを先に戻すと食べられる花が少なくなるかを考えてソートする。

typedef struct _myPI{
  int t,d;
  bool operator<(const _myPI&r)const{
    return t*r.d<r.t*d;
  }
}myPI;

myPI in[100000];

main(){
  int n;
  cin>>n;
  ll sum=0;
  ll ans=0;
  rep(i,n){
    cin>>in[i].t>>in[i].d;
    sum+=in[i].d;    
  }
  sort(in,in+n);
  rep(i,n){
    sum-=in[i].d;    
    ans+=2*sum*in[i].t;
  }
  cout<<ans<<endl;
}