ABC150 C - Count Order

備忘録

問題

atcoder.jp

回答

import sys
import os
import itertools


def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    N = int(sys.stdin.readline().rstrip())
    P = tuple(map(int, sys.stdin.readline().split()))
    Q = tuple(map(int, sys.stdin.readline().split()))

    seq = []
    for n in range(N):
        seq.append(n + 1)

    allcase = list(itertools.permutations(seq))
    ret = []
    for i, case in enumerate(allcase):
        if case == P:
            ret.append(i)
        if case == Q:
            ret.append(i)

    print(abs(ret[0] - ret[1]))


if __name__ == '__main__':
    main()

考え方

1, 2, ... Nの順列からすべての組み合わせを生成する。
生成した組み合わせからPQの位置を探索し、
Pの位置とQの位置を減算、結果を絶対値にして回答。

pythonは組み合わせを生成する関数あって非常に便利。。。