cipher

来源:互联网 发布:java算法书籍推荐 编辑:程序博客网 时间:2024/05/22 05:04

http://icpc.njust.edu.cn/Problem/Local/1001/

//经分析,字符串x次变换后会与初始状态相同#include <cstdio>#include <iostream>#include <cstring>using namespace std;int arr[201];char s[201][201];bool compare(char s1[],char s2[],int n){    for(int i=0;i<n;i++)        if(s1[i]!=s2[i])        return false;    return true;}int main(){    int n;    while(cin>>n)    {        if(!n)            return 0;        for(int i=0;i<n;i++)            cin>>arr[i];        int k;        while(cin>>k)        {            char str[201];            int ans=-1;            if(!k)                break;            char ch;            ch=getchar();            gets(str);            for(int i=0;i<strlen(str);i++)                s[0][i]=str[i];            for(int i=strlen(str);i<n;i++)                s[0][i]=' ';          //开始k次变换          for(int i=1;i<k+1;i++)            {                for(int j=0;j<n;j++)                {                    int index;                    for(index=0;index<n;)                    {                        if(arr[index]==j+1)                            break;                        index++;                    }                    s[i][j]=s[i-1][index];                }                if(compare(s[0],s[i],n))//说明周期为i                {                    ans=k%i;                    break;                }            }            if(ans==-1)                ans=k;            for(int i=0;i<n;i++)                cout<<s[ans][i];            cout<<endl;        }        cout<<endl;    }}