7-2 2020 CCPC Wannafly Winter Camp Day1 B. 密码学(简单模拟)

考虑一种加密方式,它需要一个任意长度的原文 m 和秘钥 key,其中要求原文和秘钥只包含大写和小写的英文字符。

首先定义字符之间的加密,用字符 a 去加密字符 b 的结果是:

首先把 a 和 b 转成数字 x 和 y。转换的规则是,小写字母 a 到 z 依次对应 0 到 25,大写字母依次对应 26 到 51。

计算 x 和 y 的和 z,对 52 取模,即计算 (x+y) mod 52。

返回数字 z 对应的字符。

现在来讲如何用秘钥 key 来加密原文 m:

如果秘钥的 key 的长度小于 m,那么不停重复 key 直到长度不小于 m 为止。举例来说,如果原文是 beijing,秘钥是 PKUSAA,那么秘钥需要被重复称 PKUSAAPKUSAA。

假设原文的长度是 n,那么对于每一个 [1,n] 的数字 i,都用 key 的第 i 个字符去加密 m 的第 i 个字符。

返回结果。

那么用 PKUSAA 去加密 beijing 的结果就是:QOcbINV。

现在火山哥有 n 个字符串,s​1​​ 到 s​n​​ ,他对这些字符串做了 m 次加密操作:第 i 次加密操作用第 s​x​i 去加密 s​y​i​​ ​​ ,并把 s​y​i​​ ​​ 替换成加密结果。

现在依次给出 m 次加密操作,以及加密操作结束后每一个字符串的模样,你可以还原出这 n 个字符串原来的模样吗?

输入格式:
第一行输入两个整数 n,m(1≤n,m≤1000)。

接下来 m 行每行输入两个整数 x​i​​ ,yi​​ ,表示依次加密操作,保证 x​i​​ 不等于 y​i​​ 。

接下来 n 行每行输入一个字符串,表示加密最后的结果。字符串的长度在 1 到 100 之间,只包含大小写英文字符。

输出格式
输出 n 行,每行一个字符串,表示原本的字符串。

输入样例:
2 1
1 2
PKUSAA
QOcbINV

输出样例:
PKUSAA
beijing

题解:简单模拟即可。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<cstdlib>
#include<map>
#include<set>
#define ll long long
#define llu unsigned ll
#define ld long double
#define pr make_pair
#define pb push_
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值