【题解】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;
}

后记

云落不开心,因为交错代码没有一边切!

--------------------------云落的分割线--------------------------

posted @ 2024-11-20 22:59  sunxuhetai  阅读(12)  评论(0)    收藏  举报