| 比赛 | 
    NOIP2015普及组练习 | 
    评测结果 | 
    AAAAAAAAAA | 
    | 题目名称 | 
    Vigenère密码 | 
    最终得分 | 
    100 | 
    | 用户昵称 | 
    落尘 | 
    运行时间 | 
    0.007 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    0.32 MiB  | 
    | 提交时间 | 
    2015-11-03 18:21:34 | 
显示代码纯文本
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
using namespace std;
int N,M;
char S[1100];
char T[1100];
bool X[1100];
ifstream fin("vigenere.in");
ofstream fout("vigenere.out");
char CALC(int k){
	int c=int('a');
	if(int(T[k])-int(S[k])<0) c+=26;
	c+=(int(T[k])-int(S[k]));
	return char(c);
}
void INIT(){
	fin>>S>>T;
	N=strlen(S);
	M=strlen(T);
	for(int i=0;i<N;++i) if(S[i]>='A' && S[i]<='Z') S[i]+=('a'-'A');
	for(int i=N;i<M;++i) S[i]=S[i-N];
	for(int i=0;i<M;++i){
		if(T[i]>='A' && T[i]<='Z')
			T[i]+=('a'-'A'),X[i]=true;
		T[i]=CALC(i);
		if(X[i]) T[i]-=('a'-'A');
	}
	fout<<T<<endl;
}
int main(){
	INIT();
	fin.close();
	fout.close();
	return 0;
}