https://www.acmicpc.net/problem/22858
규칙에 따라 섞인 수열의 맨 처음 형태를 구하면 된다.
$P_i$에서 $i=D_i$인 경우 $S_i$가 된다.
즉, $P[D[i]]=S[i]$이다. 이를 $K$번 반복해주면 된다. $NK\leq 10^7$이기에 전부 돌려봐도 해결 가능하다.
int N, K, S[MAXN], D[MAXN], P[MAXN];
int main(void) {
fastio;
cin >> N >> K;
for (int i = 1; i <= N; i++) cin >> S[i];
for (int i = 1; i <= N; i++) cin >> D[i];
while (K--) {
for (int i = 1; i <= N; i++) P[D[i]] = S[i];
for (int i = 1; i <= N; i++) S[i] = P[i];
}
for (int i = 1; i <= N; i++) cout << P[i] << ' ';
return 0;
}
'알고리즘' 카테고리의 다른 글
[BOJ 17952] 과제는 끝나지 않아! (0) | 2024.04.29 |
---|---|
[BOJ 22862] 가장 긴 짝수 연속한 부분 수열 (large) (1) | 2024.04.02 |
[BOJ 11508] 2+1 세일 (0) | 2024.04.01 |
[BOJ 9660] 돌 게임 6 (0) | 2024.04.01 |
[BOJ 2056] 작업 (0) | 2024.03.29 |