题目链接
https://ac.nowcoder.com/acm/contest/19306/1052
题目分析
根据题目给的图发现,密文的会因为密钥的起始位置去偏移,形成了一个环。
所以只要我们知道密钥的起始位置,密钥与密钥的距离(密文-密钥),就可以求出明文的位置。
AC代码
#include <iostream>
using namespace std;
string k, s, ans;
int main()
{
cin >> k >> s;
for (int i = 0; i < k.size(); ++ i)
if (k[i] < 97) k[i] += 32;
int j = 0, pos = 0;
for (int i = 0; i < s.size(); ++ i)
{
int mod = j % k.size();
int yao = k[mod] - 'a';
if (s[i] >= 97 && s[i] <= 122) // 小写的情况
{
int mi = s[i] - 'a';
pos = (mi - yao + 26) % 26;
ans.push_back(pos + 'a');
}
else // 大写的情况
{
int mi = s[i] - 'A';
pos = (mi - yao + 26) % 26;
ans.push_back(pos + 'A');
}
j ++ ;
}
cout << ans;
return 0;
}
标签:题目,NOIP2012,int,Vigen,re,密钥,size
From: https://www.cnblogs.com/ClockParadox43/p/17431733.html