AOJ 1119 Exploring Caves

問題


データセット数が与えられてその後にロボットの移動した分の座標が与えられる、移動した先の中で一番遠いところはどこ?、同じならX座標が大きい方になる。日本語が苦手なのか俺は。

解き方


英語を読みたくなかったのでずっと手を付けないでいた。くそ簡単、移動先の座標を全て記録して、(0, 0)からの距離の降順、Xの降順に並びかえるとか、一つずつ調べて一番多いのを探すとか

コード

using namespace std;

#define Y first
#define X second

typedef pair<int, int> pi;

bool cmp(const pi &a, const pi &b){
  int adis = a.Y*a.Y+a.X*a.X, bdis = b.Y*b.Y+b.X*b.X;
  if(adis != bdis) return adis > bdis;
  return a.X > b.X;
}

int main(){
  int N, dx, dy;
  scanf("%d", &N);
  while(N--){
    int x = 0, y = 0;
    vector<pi>rank;
    while(scanf("%d%d", &dx, &dy) && dx+dy){
      x += dx, y += dy;
      rank.push_back(make_pair(y, x));
    }

    sort(rank.begin(), rank.end(), cmp);
    printf("%d %d\n", rank[0].X, rank[0].Y);
  }
  return 0;
}