poj 1206

时间:2023-03-08 20:14:33
 /**
题意: 给定一序列,置换k次之后 输出其状态
置换: 考察循环节长度,
思路: 分别求出每个元素的循环节的大小,用k 模其大小,大的k次之后的位置, 输出即可
**/ #include <iostream>
#include <cstring>
#include <cstdio>
using namespace std; int main()
{
int n;
int sec[];
int path[][];
int len[];
while(cin>>n&&n){
memset(path,,sizeof(path));
memset(len,,sizeof(len));
int t;
for(int i=;i<n;i++){
cin>>t;
sec[i] = t-;
}
for(int i=;i<n;i++){
int j= i;
path[i][] = j;
len[i] = ;
for(j=sec[j];j!=i;j=sec[j])
path[i][len[i]++] = j;
}
int k;
char str[];
while(cin>>k&&k){
getchar();
gets(str);
char res[];
//int len = strlen(str);
int m=;
for(;str[m];m++);
for(int j=m;j<n;j++)
str[j]=' ';
for(int i=;i<n;i++)
res[path[i][k%len[i]]] = str[i];
res[n]='\0';
cout<<res<<endl;
}
cout<<endl;
}
return ;
}