zoukankan      html  css  js  c++  java
  • POJ1026 Cipher 置换群

      题目链接:http://poj.org/problem?id=1026

      简单的置换题目,求出置换群后直接取余即可。

     1 //STATUS:C++_AC_32MS_308KB
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #include<string.h>
     5 #include<math.h>
     6 #include<iostream>
     7 #include<string>
     8 #include<algorithm>
     9 #include<vector>
    10 #include<queue>
    11 #include<stack>
    12 #include<map>
    13 using namespace std;
    14 #define LL long long
    15 #define pii pair<int,int>
    16 #define Max(a,b) ((a)>(b)?(a):(b))
    17 #define Min(a,b) ((a)<(b)?(a):(b))
    18 #define mem(a,b) memset(a,b,sizeof(a))
    19 #define lson l,mid,rt<<1
    20 #define rson mid+1,r,rt<<1|1
    21 const int N=210,INF=0x3f3f3f3f,MOD=40001,STA=8000010;
    22 const double DNF=1e13;
    23 
    24 int c[N],f[N][N],vis[N];
    25 int n,k,cnt;
    26 
    27 int main()
    28 {
    29  //   freopen("in.txt","r",stdin);
    30     int i,j,lens,r,t,u,w;
    31     char s[N],ans[N];
    32     while(~scanf("%d",&n) && n)
    33     {
    34         cnt=0;
    35         mem(vis,0);
    36         for(i=1;i<=n;i++){
    37             scanf("%d",&c[i]);
    38             f[i][0]=0;
    39         }
    40 
    41         for(i=1;i<=n;i++){
    42             if(!vis[i]){
    43                 f[cnt][0]=0;
    44                 u=i;
    45                 while(!vis[u]){
    46                     vis[u]=1;
    47                     f[cnt][++f[cnt][0]]=u;
    48                     u=c[u];
    49                 }
    50                 cnt++;
    51             }
    52         }
    53 
    54         while(scanf("%d",&k) && k){
    55             getchar();
    56             gets(s);
    57             lens=strlen(s);
    58             while(lens<n)s[lens++]=' ';
    59             s[lens]=0;
    60             for(i=0;i<cnt;i++){
    61                 t=f[i][0];
    62                 r=k%t;
    63                 for(j=1;j<=t;j++){
    64                     w=((j+r)%t>0?(j+r)%t:t);
    65                     ans[f[i][w]-1]=s[f[i][j]-1];
    66                 }
    67             }
    68             ans[n]=0;
    69             printf("%s\n",ans);
    70         }
    71         putchar('\n');
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    测试常用的sql语句总结
    测试常用的Linux命令总结
    【转载】vim 中如何替换选中行或指定几行内的文本
    1074 Reversing Linked List
    1077 Kuchiguse
    LC 355. Design Twitter
    LCP 5. 发 LeetCoin
    LC 1409. Queries on a Permutation With Key
    1095 Cars on Campus
    LC 1369. Get the Second Most Recent Activity
  • 原文地址:https://www.cnblogs.com/zhsl/p/3006297.html
Copyright © 2011-2022 走看看