模拟呗。
我是打表过的。
貌似很无脑。
但是T1我就随便浪了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<ctime>
#include<queue>
#define LL long long
using namespace std;
char K[109],M[1009],C[1009];
int f[30][30],len,b[1009];
void pre()
{
for(int i=1;i<=26;i++)
{
int t=i;
for(int j=1;j<=26;j++)
{
f[i][j]=t;
t++;
if(t>26) t%=26;
}
}
/*for(int i=1;i<=26;i++)
{
for(int j=1;j<=26;j++)
printf("%d ",f[i][j]);
puts("");
}*/
}
int main()
{
freopen("vigenere.in","r",stdin);
//cout<<(char)('a'-32);
pre();
gets(K+1);gets(C+1);
int n=strlen(C+1);
int m=strlen(K+1);
for(int i=1;i<=n;i++)
if(C[i]<'a'||C[i]>'z') C[i]=C[i]+32,b[i]=1;
for(int i=1;i<=m;i++)
if(K[i]<'a'||K[i]>'z') K[i]=K[i]+32;
//puts(K+1);puts("");puts(C+1);puts("");
int j=1;
for(int i=1;i<=n;i++)
{
for(int k=1;k<=26;k++)
if((C[i]-'a'+1)==(f[k][K[j]-'a'+1])){
M[i]=k+'a'-1;
break;
}
if(b[i]) M[i]=M[i]-32;
j++;
if(j>m) j=1;
}
puts(M+1);
return 0;
}