记录编号 298264 评测结果 AAAAAAAAAA
题目名称 [NOIP 2012]Vigenère密码 最终得分 100
用户昵称 Gravatar蜗牛哲 是否通过 通过
代码语言 C++ 运行时间 0.052 s
提交时间 2016-08-20 16:16:41 内存使用 0.25 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<climits>
#include<cmath>
#include<cstdlib>
#include<cctype>
#include<algorithm>
#include<set>
#include<deque>
#include<queue>
#include<string>
#include<map>
#include<stack>
#include<sstream>
#include<vector>
using namespace std;
//====================struct declaration=====================

//====================var declaration========================
const int maxn=1000+10;
char key[maxn],mi[maxn],ming[maxn];
bool f[maxn];

int lenkey,lenmi;
//====================function declaration===================

//====================main code==============================
int main()
{
	freopen("vigenere.in","r",stdin);
	freopen("vigenere.out","w",stdout);
	
	cin>>key;
	lenkey=strlen(key);
	cin>>mi;
	lenmi=strlen(mi);
	
	for(int i=0; i<lenkey; i++)
	{
		if(key[i]>='A' && key[i]<='Z')
		{
			key[i]+=32;
		}
	}
	for(int i=0; i<lenmi; i++)
	{
		if(mi[i]>='A' && mi[i]<='Z')
		{
			f[i]=true;
			mi[i]+=32;
		}
	}
	
	for(int i=lenkey; i<lenmi; i++)
	{
		key[i]=key[i%lenkey];
	}
	
	for(int i=0; i<lenmi; i++)
	{
		ming[i]=mi[i]-(key[i]-'a');
		if(ming[i]<'a')
			ming[i]+=26;
	}
	
	for(int i=0; i<lenmi; i++)
	{
		if(f[i])
			cout<<char(ming[i]-32);
		else
			cout<<ming[i];
	}
	cout<<endl;
	
	return 0;
}