ABC150 C問題 itertoolsで楽々と順列問題を解く
また順列を使う問題を解きました。
大きさNの順列があって、その順列を並び替えてできる列をP、Qとします。
大きさNの順列を並び替えると全部でパターンあって、Pが辞書順でa番目、Qが辞書順でb番目だとしたときにを求める問題。
例えば、大きさ3の順列のパターンは全部で
の6通りあります。
このうち (1, 3, 2)は辞書順で 2番目、(3, 1, 2)は辞書順で 5番目なので、答えはになります。
まずNは最大で8なので、通りなので、良心的だなと思いながら、itertools.permutationsを使って、全通りのパターンの配列を作成します。
全パターンの配列を全探索してPとQのインデックスを記録します。
from itertools import permutations N = int(input()) lst = [i for i in range(1, N + 1)] P = tuple(int(i) for i in input().split()) Q = tuple(int(i) for i in input().split()) all_lst = list(permutations(lst)) p_idx = 0 q_idx = 0 for i, e in enumerate(all_lst): if e == P: p_idx = i if e == Q: q_idx = i print(abs(p_idx - q_idx))
itertools.permutations、ありがとう。