zoukankan      html  css  js  c++  java
  • UVA 306 Cipher

    UVA_306

        一开始倒是想到了这种移位加密是有周期的,但最后却是用的它们的最小公周期去算的。

        后来发现比别人的程序要慢很多,仔细看后才发现实际可以对每个字符的位置都用它自己的周期算一下,得到的位置也就是该字符最终的位置,这样相比用最小公周期去算要节省很多时间。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 210
    char b[310], txt[MAXD], code[MAXD];
    int g[MAXD], N, p[MAXD], t[MAXD], K;
    void init()
    {
    int i, j, k, n;
    for(i = 1; i <= N; i ++)
    scanf("%d", &g[i]);
    for(i = 1; i <= N; i ++)
    {
    k = g[i];
    for(n = 1; k != i; n ++, k = g[k]);
    t[i] = n;
    }
    }
    void solve()
    {
    int i, j, k;
    memset(txt, ' ', sizeof(txt));
    for(i = 1; b[i]; i ++)
    txt[i] = b[i];
    for(i = 1; i <= N; i ++)
    p[i] = i;
    for(i = 1; i <= N; i ++)
    {
    k = K % t[i];
    for(j = 0; j < k; j ++)
    p[i] = g[p[i]];
    }
    for(i = 1; i <= N; i ++)
    code[p[i]] = txt[i];
    for(i = 1; i <= N; i ++)
    printf("%c", code[i]);
    printf("\n");
    }
    int main()
    {
    for(;;)
    {
    scanf("%d", &N);
    if(!N)
    break;
    init();
    for(;;)
    {
    scanf("%d", &K);
    if(!K)
    break;
    getchar();
    gets(b + 1);
    solve();
    }
    printf("\n");
    }
    return 0;
    }


  • 相关阅读:
    alloffthelights使用方法
    tweenMax学习笔记
    移动端获取手机摄像头和相册
    livereload使用方法
    Bower使用笔记
    github 远程仓库
    git for windows 本地仓库
    python 对文件操作
    Python 装饰器
    JavaScript 做的网页版扫雷小游戏
  • 原文地址:https://www.cnblogs.com/staginner/p/2294931.html
Copyright © 2011-2022 走看看