C-ID

C-IDについて。

座標圧縮の問題と言えるらしい。 ほしい配列はすぐにわかったけど、この方法は慣れないとスラスラ書けないな。

def solve():  
    N, M = map(int, input().split())

    # N分の二次元配列を用意する
    piys = [[] for _ in range(N)]
    # 各県を添え字として市を格納していく
    for i in range(M):
        p, y = map(int, input().split())
        piys[p-1].append((y, i))

    ans = [None]*M
    # enumrateで添字付きで県、市の配列を見る
    # p = index, iys = 市となる
    for p, iys in enumerate(piys):
        iys.sort()
        # enumrateで添字付きで市の配列を見る
        # k = 誕生順, y = 経過時間、i = 元のpiysの順序となる
        for k, (y, i) in enumerate(iys):
            pref = str(p+1)
            born = str(k+1)
            # 左を0埋めする
            ans[i] = pref.rjust(6, "0")+born.rjust(6, "0")

    for i in ans:
        print(i)


if __name__ == "__main__":  
    solve()

rjustで左埋めした文字列を取得可能。 enumrateはindex付きの配列を取得する。