[165]座標の整列

2260 ワード

[165]座標の整列


質問する


2 D平面上のN個の点を与える.x座標のインクリメント順に座標を並べ、x座標が同じ場合はy座標のインクリメント順に座標を並べ、プログラム出力を記述します.

入力


第1行は、点の個数N(1≦N≦100000)を与える.2行目から、N行においてi番点の位置xiとyiが与えられる.(−1000≦xi,yi≦100000)座標は常に整数であり、2つの位置が同じ点はない.

しゅつりょく


最初の行からN行の位置合わせの結果を出力します.

コード#コード#

#include <iostream>
#include <algorithm>
#include <utility>

using namespace std;

bool comp(pair<int, int> a, pair<int, int> b) {
    if(a.first == b.first) {
        return a.second < b.second;
    } else {
        return a.first < b.first;
    }
}

int main() {
    int N, x, y;
    pair<int, int> input[100000];

    scanf("%d", &N);

    for(int i = 0; i < N; i++) {
        scanf("%d%d", &x, &y);
        input[i] = make_pair(x, y);
    }

    sort(input, input+N, comp);

    for(int i = 0; i < N; i++) {
        printf("%d %d\n", input[i].first, input[i].second);
    }
}

追加の説明


データはペアです.
データをpairにグループ化し,配列を形成する.
アルゴリズムタイトルのsortを使用して配列をソートします.
このとき,comp関数を作成し,条件に基づいて比較できるようにした.
ソース:https://www.acmicpc.net/problem/11650