はまやんはまやんはまやん

hamayanhamayan's blog

ID [AtCoder Beginner Contest 113 C]

https://beta.atcoder.jp/contests/abc113/tasks/abc113_c

解説

https://beta.atcoder.jp/contests/abc113/submissions/3558586

流れは以下の通り。
1. 県ごとに市を分ける
2. 県ごとに市の誕生年でソートし、順番に認識番号を作る
3. 最後に順番に答えていく
 
流れ1
E[i] := 県iに属する市 (誕生年, 市の番号)
を作る。
 
流れ2
iについて全探索する。
まず、E[i]でソートすると、pairの一番目でまずはソートされるので、誕生年でソートされる。
あとは、順番に市の番号について、認識番号を作って、ans配列に格納していく
 
流れ3
ans配列を順番に答える

int N, M;
vector<pair<int,int>> E[101010];
string ans[101010];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N >> M;
    rep(i, 0, M) {
        int p, y; cin >> p >> y;
        E[p].push_back({ y, i });
    }
    rep(i, 1, N + 1) {
        sort(all(E[i]));
        int n = E[i].size();
        rep(j, 0, n) {
            char buf[13];
            sprintf(buf, "%06d%06d", i, j + 1);
            ans[E[i][j].second] = string(buf);
        }
    }
    rep(i, 0, M) printf("%s\n", ans[i].c_str());
}