poj 1026 Cipher

置换群就可以搞定!!!

注意下格式就好了……

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<algorithm>
 4 #include<iomanip>
 5 #include<cmath>
 6 #include<stdlib.h>
 7 #include<cstring>
 8 #include<vector>
 9 #define ll __int64
10 #define pi acos(-1.0)
11 #define MAX 50000
12 using namespace std;
13 int code[202],an[202];
14 char str1[202],str2[202];
15 void init(int n)
16 {
17     int i,j,t;
18     for (i=1;i<=n;i++){
19         j = i;
20         t = 0;
21         while (code[j]!=i) j = code[j],t++;
22         an[i] = t+1;
23     }
24 }
25 int main(){
26     int n,m,i,j,k,t;
27     while (cin>>n&&n){
28         for (i=1;i<=n;i++)
29             cin>>code[i];
30         init(n);
31         while (scanf("%d",&k)!=EOF&&k){
32             getchar();
33             gets(str1+1);
34             for (i=strlen(str1+1)+1;i<=n;i++)
35                 str1[i] =' ';
36             for (i=1;i<=n;i++){
37                 t = k%an[i];
38                 j = i;
39                 if (t==0) str2[i] = str1[i];
40                 while (t--){
41                     j = code[j];
42                 }
43                 str2[j] = str1[i];
44             }
45             for (i=1;i<=n;i++)
46                 cout<<str2[i];
47             cout<<endl;
48         }
49         cout<<endl;
50     }
51     return 0;
52 }
View Code
原文地址:https://www.cnblogs.com/xin-hua/p/3222943.html