xxxxxxxxxx
import math
N,K = map(int,input().split())
A = [0]+list(map(int,input().split()))
B = [0]+list(map(int,input().split()))
C = [0]+list(map(int,input().split()))
ABC = [0]*(N+1)
for i in range(N+1):
ABC[i] = C[B[A[i]]]
K3 = K//3
# 二次元配列作成
nex = []
for _ in range(int(math.log2(K3+1)) + 1):
nex.append([0] * (N+1))
# 初期化
for i in range(N+1):
nex[0][i]=ABC[i]
# ダブリングで表を構築
for k in range(1, int(math.log2(K3+1)) + 1):
for m in range(N+1):
nex[k][m] = nex[k - 1][nex[k - 1][m]]
a = []
for i in range(int(math.log2(K3+1)) + 1):
if K3>>i & 1:
a.append(i)
ANS = list(range(N+1))
for i in a:
for j in range(N+1):
ANS[j] = nex[i][ANS[j]]
if K%3==1:
ANS2 = [0]*(N+1)
for i in range(N+1):
ANS2[i] = A[ANS[i]]
ANS = ANS2
if K%3==2:
ANS2 = [0]*(N+1)
for i in range(N+1):
ANS2[i] = B[A[ANS[i]]]
ANS = ANS2
print(*ANS[1::])
提出日時 | |
ユーザー | ![]() |
言語 | Python3 (pypy3 7.3.1) |
結果 | AC |
実行時間 | 461 ms |
メモリ | 1528528 kb |
テストケース名 | 結果 | 実行時間 | メモリ |
---|---|---|---|
00_sample-1.txt | AC | 69 ms | 1528528 kb |
00_sample-4.txt | AC | 50 ms | 1528528 kb |
01_mid-1.txt | AC | 51 ms | 1528528 kb |
01_mid-2.txt | AC | 54 ms | 1528528 kb |
01_mid-3.txt | AC | 51 ms | 1528528 kb |
02_sample-2.txt | AC | 51 ms | 1528528 kb |
02_sample-3.txt | AC | 51 ms | 1528528 kb |
handmade-1.txt | AC | 373 ms | 1528528 kb |
large-1.txt | AC | 408 ms | 1528528 kb |
large-2.txt | AC | 391 ms | 1528528 kb |
large-3.txt | AC | 391 ms | 1528528 kb |
shuffle-1.txt | AC | 461 ms | 1528528 kb |
shuffle-2.txt | AC | 460 ms | 1528528 kb |