P1079 [NOIP 2012 提高组] Vigenère 密码 题解

· · 题解

P1079 [NOIP 2012 提高组] Vigenère 密码 题解

#include <iostream>
using namespace std;
int main(){
    string k,m; cin >> k >> m;
    for(int i = 0;i < m.size();i++){
        int t = (k[i%k.size()] & 31) - 1;
        m[i] = (m[i]&31) - t > 0 ? m[i] - t : m[i] - t + 26; 
    }
    cout << m;
    return 0;
}
//&31 得到的是在ASCII表中的位置
//如果k_i大 就要+26