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

分析

stringmap可以简化代码

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

代码

#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;
}

发布者:Cinema

成功的道路并不狭窄,因为大部分人都在颓废。

加入对话

1条评论

电子邮件地址不会被公开。 必填项已用*标注