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

 

 

 

你可能感兴趣的:(poj)