EX22 - 2つ目の値でソート / 3.02 /

Time Limit: 2 sec / Memory Limit: 256 MB

説明ページに戻る

問題文

整数a_i, b_iのペア(a_i, b_i)がN個与えられます(1 \leq i \leq N)。b_iが小さい順にペアを並べ替えてください。


制約

  • 1 \leq N \leq 100
  • 1 \leq a_i, b_i \leq 10^9
  • b_iは全て異なる
  • 入力はすべて整数

入力

入力は次の形式で標準入力から与えられます。

N
a_1 b_1
a_2 b_2
︙ ︙
a_N b_N

出力

ペアを並べ替えた順に1行毎に出力してください。 各ペアはa_ib_iをスペース区切りで出力してください。


ジャッジでは以下の入力例以外のケースに関してもテストされることに注意。

入力例1

3
5 2
2 7
4 1

出力例1

4 1
5 2
2 7

(5, 2), (2, 7), (4, 1)という3つのペアがあり、b_iの値が小さい順に並べ替えると、(4, 1), (5, 2), (2, 7)となります。

入力例2

5
1 2
3 4
5 6
7 8
9 10

出力例2

1 2
3 4
5 6
7 8
9 10

ヒント

クリックでヒントを開く

  • pair<int, int>で2つの整数のペアを表すことができます。
  • pairを比較すると、1番目の値で比較され、等しい場合は2番目の値で比較されます。
  • 配列を要素が小さい順に並べ替えるにはsort(a.begin(), a.end());とします。


解答例

必ず自分で問題に挑戦してみてから見てください。

クリックで解答例を見る

pair<int, int>の配列を用意して、(b_i, a_i)となるように格納すれば、sortするだけでbが小さい順に並べ替えることができます。

#include <bits/stdc++.h>
using namespace std;

int main() {
  int N;
  cin >> N;
  vector<pair<int, int>> p(N);
  for (int i = 0; i < N; i++) {
    int a, b;
    cin >> a >> b;
    p.at(i) = make_pair(b, a);  // b, a の順でペアにする
  }

  sort(p.begin(), p.end());

  for (int i = 0; i < N; i++) {
    int b, a;
    tie(b, a) = p.at(i);  // b, a の順であることに注意
    cout << a << " " << b << endl;
  }
}