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 }
  • 相关阅读:
    第一次留下自己的随笔
    NSOperation多线程方式
    NSThread多线程方式
    GCD多线程机制
    GCD创建单例常用的两种方法
    线程锁
    使用KVO模式,设置应用角标数字
    keyChain RSA加密 KVO
    NSURLConnection网络处理和NSURLSession网络处理
    UIAlertView和UIAlertViewController
  • 原文地址:https://www.cnblogs.com/zhsl/p/3006297.html
Copyright © 2011-2022 走看看