题库练习 加密通信

A71598 | 加密通信

来源编程题
时间限制1s
内存限制128MB
通过 / 提交0/0

题目描述

在一次军事演习中,小凯担任通信兵,负责解密传来的信息。他会收到一份 n \times n 的数字表(仅包含 0-910 种数码),和一份 m \times m 的字母表(仅包含 A-Z、a-z52 种字符)。

数字表被称为解密卡,字母表被称为加密卡。规定如下名词:

1.覆盖区域:将数字表和字母表对齐,使得数字表在上,字母表在下,数字与字母一一对应,如果数字表的 11 列对应字母表的 xy 列,那么数字表的 1+k1+k 列对应字母表的 x+ky+k 列,此时覆盖区域为字母表以 xy 列为左上角、x+n-1y+n-1 列为右下角的正方形范围。简单来说,根据图片显示,若数字表的左上角盖在了 22 列的位置,则数字表会覆盖(2,2)到(3,3)这片区域。

2.有效区域:称某字母和其在字母表的顺序数字为互相对应,字母 Aa 是第 1 个字母、字母 Ii 是第 9 个字母,那么 Aa1 对应,Ii9 对应,以此类推。如果覆盖区域的四个顶点字母恰好和原始数字表的四个顶点数字互相对应,那么这个覆盖区域称之为有效区域。

3.数字关联:0 和任何字母关联,1 不能和任何字母关联,2-9 中的质数和大写字母关联,2-9 中的合数和小写字母关联。若关联成功,则提取出来作为密码的一部分,如上图中 2 是质数,需关联大写字母,2 对应的是 B,关联成功;3 是质数,需关联大写字母,3 对应的 c 关联失败;4 是合数,需关联小写字母,而 4 对应的是 D,关联失败。因此上述图中,本次覆盖只关联成功一次,提取出一个密码 B

4.解密数字表:大小为 n \times n,可以由原始数字表顺时针旋转若干次 90°得到。

5.区域解密:有效区域和解密数字表对齐,从左到右从上到下,将和解密数字表中对应位置数字恰好关联的字母提取出来,构成字符串。

一次解密操作包含以下步骤:首先从左到右从上到下找出所有有效区域,依次进行解密。对于每个有效区域首先用原始数字表进行 1 次区域解密,然后根据当前有效区域的顶点大写 字母数量 x,额外进行 x 次区域解密(如图示中四个顶点有两个大写字母,因此需旋转两次),第 i 次解密时将原始数字表顺时针旋转 i \times 90° 后作为解密数字表再进行区域解密。最后将所有区域解密的字符串按序连接,构成最终的解密字符串。

你需要帮助小凯完成解密工作。

输入格式

n+m+1 行,

1 行两个正整数 nm,分别代表数字表和字母表的大小;

2n+1 行分别有连续的 n 个数码字符,代表数字表的内容;

n+2n+m+1 行分别有连续的 m 个字母字符,代表字母表的内容。

输出格式

仅一行一个字符串,代表解密后的答案。如果答案为空串,你需要输出 No solution

输入输出样例

输入 #1
2 3
11
13
AAB
ACB
BzB
输出 #1
CAAAC
输入 #2
3 4
101
245
313
DABa
AFab
Fcdc
cdcD
输出 #2
BFaABabFFcAFcd
C++ 编辑器
输入
输出