//11170981 c00h00g 1026 Accepted 404K 110MS G++ 1120B 2013-01-11 22:24:41
//只需要考虑每一个字符的周期,使用circle数组记录
//比如说题目中的例子 1->4->7->1可知,这三个数的周期是3,只需要使用k%3就可以知道需要操作的次数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int a[205];
int circle[205];
char src[205];
char dst[205];
int n,k;
//计算每个字符的周期
int compute_loop(){
for(int i=1;i<=n;i++){
int j=i,cur=i,num=1;
while(a[cur]!=j){
num++;
cur=a[cur];
}
circle[i]=num;
}
}
int main(){
while(scanf("%d",&n)!=EOF){
if(n==0)
break;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
compute_loop();
while(scanf("%d",&k)){
if(k==0)
break;
gets(src);
int len=strlen(src+1);
if(len<n){
for(int i=len+1;i<=n;i++)
src[i]=' ';
src[n+1]='\0';
}
for(int i=1;i<=n;i++){
int id=i;
for(int j=0;j<k%circle[i];j++)
id=a[id];
dst[id]=src[i];
}
dst[n+1]='\0';
printf("%s\n",dst+1);
}
printf("\n");
}
return 0;
}
POJ 1026 Cipher
最新推荐文章于 2021-04-26 22:41:22 发布