【競プロ】過去問精選100問「AtCoder Beginner Contest 150 C - Count Order」解法
Free-PhotosによるPixabayからの画像

このシリーズではレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】でまとめられている100問をPythonで解いています。

問題

AtCoder Beginner Contest 150 C - Count Order

ポイント

この問題は順列全探索を用いて解いていきます。(Pythonではitertoolsのpermutationsを使うと便利です。)

①数列Nの順列パターンを全て洗い出す

②順列パターンを辞書順にソート

③P,Qの辞書順のインデックスを取得

といった流れで解答を求めていきます。

コード

def main():
    import itertools

    N = int(input())
    PQ = [tuple(int(i) for i in input().split(" ")) for _ in range(2)]

    # ①順列全パターンの作成
    a = [i for i in range(1, N + 1)]
    patterns = itertools.permutations(a)

    # ②順列パターンを辞書順にソート
    patterns_list = []
    for p in patterns:
        patterns_list.append(p)

    patterns_list.sort()

    # ③P,Qの辞書順のインデックスを取得    
    a = patterns_list.index(PQ[0]) + 1  # Pの辞書順
    b = patterns_list.index(PQ[1]) + 1  # Qの辞書順

    print(abs(a - b))


if __name__ == '__main__':
    main()
おすすめの記事