首页 > 其他 > 详细

poj 1026 Cipher

时间:2014-05-30 21:46:15      阅读:446      评论:0      收藏:0      [点我收藏+]

http://poj.org/problem?id=1026

这道题题意是给你一个置换群,再给你一个字符串,输出经过k次置换的字符串。 就是找循环节。

bubuko.com,布布扣
 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 }
View Code

 

poj 1026 Cipher,布布扣,bubuko.com

poj 1026 Cipher

原文:http://www.cnblogs.com/fanminghui/p/3760027.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!