今回は問題が分かり易い。
いっつも忘れる、permutation どう描くんだっけ?
参考にしつつ、全探索してみた。
2 < N < 8 なので助かった。
CountOrder.py
n = int(input())
P = list(map(int,input().split()))
Q = list(map(int,input().split()))
P = "".join(list(map(lambda x:str(x),P)))
Q = "".join(list(map(lambda x:str(x),Q)))
from itertools import permutations
i = 1
dic={}
for nums in permutations(range(1,n+1)):#O(40000)
#print(nums)
nums = list(nums)
nums = "".join(list(map(lambda x:str(x),nums)))#O(8)
dic[nums] = i
i += 1
print(abs(dic[P]-dic[Q]))#114ms
permutation は辞書順で出してくれる。
だから出力と、何番目に出力したのかを記録する i があれば
テーブルは簡単にできる。
後は引き算だけだ!!
あれから。。再チャレンジ
abc150c.py
N = int(input())
P = list(input().split())
P = "".join(P)
Q = list(input().split())
Q = "".join(Q)
from itertools import permutations
lis = []
for i in permutations(map(str,range(1,N+1)),N):
lis.append("".join(i))
print(abs(lis.index(P)-lis.index(Q)))#40ms
少しだけ深化できたかも。