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]='