NC16560. [NOIP2012]Vigenère 密码
描述
输入描述
共 2 行。
第一行为一个字符串,表示密钥 k ,长度不超过 100 ,其中仅包含大小写字母。
第二行为一个字符串,表示经加密后的密文,长度不超过 1000 ,其中仅包含大小写字母。
输出描述
一个字符串,表示输入密钥和密文所对应的明文。
示例1
输入:
CompleteVictory Yvqgpxaimmklongnzfwpvxmniytm
输出:
Wherethereisawillthereisaway
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 504K, 提交时间: 2019-02-24 09:04:57
#include <iostream> using namespace std; int main() { string k,c; cin>>k>>c; for (int i=0;i<c.length();i++) { int t=(k[i%k.length()]&31)-1; c[i]=(c[i]&31)-t>0?c[i]-t:c[i]-t+26; } cout<<c<<endl; return 0; }
Python3 解法, 执行用时: 48ms, 内存消耗: 4660K, 提交时间: 2022-04-06 01:55:02
k=input() m=input() k = k*(len(m)//len(k)+1) k=k.upper() for i in range(len(m)): kk=ord(k[i])-65 s=m[i] mm=ord(s.upper())-65 if mm>=kk: j=chr(ord(m[i])-kk) else: j=chr(ord(m[i])-kk+26) print(j,end='')
C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 472K, 提交时间: 2023-04-02 22:18:07
#include<bits/stdc++.h> using namespace std; int main() { string k,c; cin>>k>>c; int len=k.length(); for(int i=0;i<c.length();i++) { int t=(k[i%len]&31)-1; c[i]=(c[i]&31)>t?c[i]-t:c[i]+26-t;//看题目 } cout<<c; return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 492K, 提交时间: 2020-03-12 19:56:34
#include<bits/stdc++.h> using namespace std; int main() { string k,c; cin>>k>>c; for(int i=0;i<c.length();i++) { int t=(k[i%k.length()]&31)-1; c[i]=(c[i]&31)-t>0?c[i]-t:c[i]-t+26; } cout<<c; return 0; }