ZOJ1006 Do the Untwist

来源:互联网 发布:org.apache.shiro jar 编辑:程序博客网 时间:2024/05/16 07:38
/*===================
From      : Zoj1006
Author    : zscas08220
Algorithm :
ciphercode[i] = (plaincode[ki mod n] - i) % 28 --->
plaincode[ki % n] = (ciphercode[i]+i) % 28。
===================*/
#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;

char CC[]="_abcdefghijklmnopqrstuvwxyz.";
char Msg[72];
int k,n,PT[72];

void ToPlainCode()
{
    for(int i=0;i<n;i++)
    {
        switch(Msg[i])
        {
        case '_':
            PT[i]=0;break;
        case '.':
            PT[i]=27;break;
        default:
            PT[i]=Msg[i]-'a'+1;
        }
    }
}

void Decrypt()
{
    int i;
    int tmp[72];
    for(i=0;i<n;i++) tmp[i]=PT[i];
    for(i=0;i<n;i++)
    {
        PT[(k*i)%n]=(tmp[i]+i)%28;
    }
}

void ToText()
{
    for(int i=0;i<n;i++)
    {
        Msg[i]=CC[PT[i]];
    }
}

int main()
{
    while(cin>>k&&k)
    {
        cin>>Msg;
        n=strlen(Msg);
        ToPlainCode();
        Decrypt();
        ToText();
        cout<<Msg<<endl;
    }
    return 0;
}
原创粉丝点击