首页 > 代码库 > poj 1026 Cipher
poj 1026 Cipher
http://poj.org/problem?id=1026
这道题题意是给你一个置换群,再给你一个字符串,输出经过k次置换的字符串。 就是找循环节。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn 3000 5 using namespace std; 6 7 int a[maxn],key[maxn]; 8 int n,k; 9 char str[maxn],ans[maxn]; 10 void get_key() 11 { 12 for(int i=1; i<=n; i++) 13 { 14 int t1=1; 15 int id=a[i]; 16 while(id!=i) 17 { 18 id=a[id]; 19 t1++; 20 } 21 key[i]=t1; 22 } 23 } 24 25 int main() 26 { 27 while(scanf("%d",&n)!=EOF) 28 { 29 if(n==0) break; 30 memset(a,0,sizeof(a)); 31 memset(key,0,sizeof(key)); 32 for(int i=1; i<=n; i++) 33 { 34 scanf("%d",&a[i]); 35 } 36 get_key(); 37 while(scanf("%d",&k)!=EOF) 38 { 39 if(k==0) break; 40 getchar(); 41 gets(str+1); 42 int len=strlen(str+1); 43 for(int i=len+1; i<=n; i++) str[i]=‘ ‘; 44 str[n+1]=‘\0‘; 45 for(int i=1; i<=n; i++) 46 { 47 int id1=i; 48 for(int j=0; j<k%key[i]; j++) 49 { 50 id1=a[id1]; 51 } 52 ans[id1]=str[i]; 53 } 54 ans[n+1]=‘\0‘; 55 for(int i=1; i<=n; i++) 56 { 57 printf("%c",ans[i]); 58 } 59 printf("\n"); 60 } 61 printf("\n"); 62 } 63 return 0; 64 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。