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()); }