「题解」Luogu 1079「Vigenère 密码」

分析

stringmap可以简化代码

大小写转换可以异或空格符

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
#include<string>
#include<map>
const int MAXN = 1000 + 6;
inline bool isLower(char c){return 'a' <= c && c <= 'z' ? true : false;}
int main(){
std::string k,c,m = "";
m.reserve(666666);k.reserve(666666);
std::cin >> k >> c;
for(int i = 0;i < 11;i++) k += k;
for(int i = 0;i < c.size();i++){
if(isLower(c[i])){
if(!isLower(k[i])) k[i] ^= ' ';
m.push_back(c[i] - k[i] + 'a');
if(m[i] < 'a') m[i] += 26;
}else{
if(isLower(k[i])) k[i] ^= ' ';
m.push_back(c[i] - k[i] + 'A');
if(m[i] < 'A') m[i] += 26;
}
}
std::cout << m;

return 0;
}
分享到