codevs 1197 Vigenère密码

开始做NOIP啦。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1050
using namespace std;
int map[30][30],len1,len2;
char s1[maxn],s2[maxn];
void get_table()
{
    for (int i=1;i<=26;i++)
    {
        map[i][i]=1;
        int p1=i-1,r=2;
        if (p1==0) p1=26;
        while (p1!=i)
        {
            map[i][p1]=r;
            p1--;
            if (p1==0) p1=26;
            r++;
        }
    }
}
int main()
{
    get_table();
    scanf("%s",s1);
    scanf("%s",s2);
    len1=strlen(s1);len2=strlen(s2);
    for (int i=0;i<len2;i++)
    {
        int p=i%len1,r1=s2[i],flag=0,r2=s1[p];
        if (r1<=90) flag=1;
        if (r1<=90) r1-=64;else r1-=96;
        if (r2<=90) r2-=64;else r2-=96;
        int ans=map[r1][r2];
        if (flag) printf("%c",64+ans);
        else printf("%c",96+ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/ziliuziliu/p/5741686.html