' P '

whatever I will forget

ABC113 C - ID

問題

atcoder.jp

パッと見たとき例題が全く意味がわかりませんでした。
昇順で出力せよとなっているけど、どういうこと???

解説

要は同じ県が登場した場合はその出場回数を計算・取得する必要がある。
それを求めるために一度sortを行い、同じ県で登場年度が大きいものは+1する必要がある。

A県 1998年 : A県 登場回数2回
B県 2000年 : B県 登場回数1回
A県 1990年 : A県 登場回数1回

みたいな感じ。で、出力は入力と同じオーダーで出力する必要がある。← これと昇順の意味が全くわからなかった

Pythonの文法

この問題でPythonの奥深さを学ぶ

size N のarrayを作成する方法

よく競プロでやる手法だと思うが、カウントをする際に数える要素分のarrayを作成して、
数えたい数値 = indexとして+1していく手法
これをPythonでやろうとすると、

array = [0] * N

でできる。ちなみに0は初期化時の値なので文字列なら""で初期化。

リストのアンパック

例えばArrayの要素が[1,2,3]だとすると、それぞれの変数を用意してあげることでリストの値を取り出すことが可能

array = [1,2,3]
a, b, c = array

サンプル解法

n, m = map(int, input().split())
py = []
for i in range(m):
    pref, year = map(int, input().split())
    # [誕生年, 県, 入力順序]でList作成
    py.append([year, pref, i])

# 誕生年でsort
py.sort()

# 同じ県が登場した件数を数えるためのarray作成
pref_cnt = [0] * (n + 1)
# 入力分のarrayを作成
ans = [""] * m

for tmp_py in py:
    # リストのアンパック
    year, pref, input_order = tmp_py
    # カウント
    pref_cnt[pref] += 1
    # 入力順にindexを指定して出力値を生成
    ans[input_order] = str(pref).zfill(6) + str(pref_cnt[pref]).zfill(6)

for id in ans:
    print(id)