티스토리 뷰

15464-The Bovine Shuffle(Bronze)


셔플 규칙 수열과 이 규칙을 기준으로 3번 셔플된 후의 order를 알려주고, 이 결과를 바탕으로 셔플 하기 전인 처음 상태의 order를 유추하는 문제다. 3번 셔플된 후를 알고 있으니 거꾸로 거슬러 올라가면서 2번->1번->처음 이렇게 order를 갱신해주면 된다.

만약 3번 셔플의 결과가 a b c d e 이고,셔플 규칙이 1 3 4 5 2이면 그 직전(2번 셔플)은 a c d e b가 되는 식이다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<stdio.h>
#define SIZE 101
int n,arr[SIZE];
int order[4][SIZE];
int main(){
    scanf("%d",&n);
 
    for(int i=1 ; i<=n ; i++){
        scanf("%d",&arr[i]);
    }
 
    for(int i=1 ; i<=n ; i++)
        scanf("%d",&order[0][i]);
 
 
    for(int i=1 ; i<=3 ; i++){
        for(int j=1 ; j<=n ; j++){
            order[i][j]=order[i-1][arr[j]];
        }
    }
 
 
    for(int i=1 ; i<=n ; i++){
        printf("%d\n",order[3][i]);
    }
 
    return 0;    
}
cs


댓글