[noip2012]Vigenère 密码 题解

来源:互联网 发布:淘宝stttyle 编辑:程序博客网 时间:2024/06/10 18:34

哇,好长一张表。。。。。

难道要手打这么长的表,而且还不能复制233。

其实,可以不必这么麻烦,我们观察一下,我们另A:=0,B:=1….Z:=25,那么加密就是把两个数加起来再模26,转换回去就好了。

注意记录大小写。

#include<bits/stdc++.h>using namespace std;char s[2000];int key[2000],tmp,x,L;int main(){    freopen("in.txt","r",stdin);    scanf("%s\n",s);L=strlen(s);    for(int i=0;i<L;i++)        if(s[i]>='a')key[i]=s[i]-'a';            else key[i]=s[i]-'A';    scanf("%s",s);    for(int i=0;i<strlen(s);i++)    {        if(s[i]>='a')tmp=s[i]-'a',x=1;        else tmp=s[i]-'A',x=2;        tmp=(tmp-key[i%L]+26)%26;        printf("%c",tmp+(x==1?'a':'A'));    }    return 0;} 
原创粉丝点击