このシリーズではレッドコーダーが教える、競プロ・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()