PKU 3618 Exploration

http://poj.org/problem?id=3618
シミュレーション。
n個の点が座標xiにある。この時、原点からスタートして、まだ訪れていなくて、原点に最も近い点から順番に訪れていく。1単位距離移動するのに1単位時間かかる。時間tまでに何個の点を回れるか?という問題。

多分難しくはないほうの問題だとは思います。
愚直にやりました。

PI in[50000];

main(){
  ll t,n;
  cin>>t>>n;
  rep(i,n){
    int x;
    cin>>x;
    if(x>0)in[i]=mp(x,0);
    else in[i]=mp(-x,1);
  }
  sort(in,in+n);

  ll time=0;
  int ans=0;
  int x=0;
  while(ans<n){
    if(in[ans].S!=(x<0))time+=abs(in[ans].F+abs(x));
    else time+=abs(in[ans].F-abs(x));
    if(in[ans].S)x=-in[ans].F;
    else x=in[ans].F;
    if(time>t)break;
    ++ans;
  }
  cout<<ans<<endl;
}