【题解】P1079 Vigenère 密码
题面
前言
近似一边切?第一次交错代码了……
正文
冷知识:对于一个字母 $ c $,有 $ \text{c&31} $ 表示他在字母表中的顺序
然后直接模拟做完了……
A~Z 的错位映射形如一个环
只需注意错位过程中如果越界,则 $ +26 $ 即可
代码
#include<iostream>
#include<cstring>
using namespace std;
string k,s;
int main(){
cin>>k>>s;
int len=s.length();
for(int i=0;i<len;i++){
int t=(k[i%len]&31)-1;
s[i]=(s[i]&31)-t>0?s[i]-t:s[i]-t+26;
}
cout<<s<<endl;
return 0;
}
后记
云落不开心,因为交错代码没有一边切!

浙公网安备 33010602011771号