티스토리 뷰

PS/AtCoder

[Atcoder] ABC306 :: C - Centers

뱃싸공 2023. 6. 19. 12:40

간단한 정렬 문제이다.
N이 주어지고 3 * N개의 입력으로 숫자들이 입력된다. 이때 i (1 <= i <= N)에 속하는 숫자들은 반드시 3번 입력이 된다.

이때, 각 i가 2번째로 입력되는 인덱스를 기준으로, 정렬을 해서 출력을 하라고 한다. 
N이 1e5이하이므로, O(N) 짜리 배열을 하나 만들고, 각 숫자가 몇번 입력되었는지 count하자. 2번째로 입력된 순간 vector에 넣고 인덱스를 기준으로 정렬을 하면 된다.

#include<iostream>
#include <cstring>
#include <map>
#include <vector>
#include <algorithm>
#define X first
#define Y second
using namespace std;
int N, cnt[100010];
typedef pair<int, int> pii;
vector<pii> v;

bool compare(pii a, pii b) {
    return a.Y < b.Y;
}

int main() {
    cin >> N;
    for (int i=0; i<3*N; i++) {
        int x;
        cin >> x;
        cnt[x]++;
        if (cnt[x] == 2) {
            v.push_back({x, i});
        }
    }
    sort(v.begin(), v.end(), compare);
    for (auto curr : v) {
        cout << curr.X << ' ';
    }
}

'PS > AtCoder' 카테고리의 다른 글

[AtCoder] ABC307  (0) 2023.06.24
[Atcoder] ABC306 :: D - Poisonous Full-Course  (0) 2023.06.19
[Atcoder] ABC302 :: E - Isolation  (0) 2023.06.15
[Atcoder] ABC302 :: D - Impartial Gift  (2) 2023.06.13
[Atcoder] ABC305 :: E - Art Gallery on Graph  (2) 2023.06.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함