AT_oupc2023_day1_c Caesar Cipher

题目描述

通常,恺撒密码采用 $3$ 个字母的位移,但在这里,我们允许使用任意密钥 $k$,其中 $0 \leq k < 26$,将每个字母向后移动 $k$ 位。加密文本由小写英文字母组成,位移时仅在小写字母范围内循环。 有关恺撒密码的详细说明:未加密的文本称为明文,加密后的文本称为密文。将密文还原成明文的过程称为解密。 给定密钥 $k$($0 \leq k < 26$)时,加密操作是将每个字符替换为其后第 $k$ 个字符。注意,`z` 后面的字符为 `a`。 例如,密钥为 $2$ 时,明文 `ayz` 加密后变为 `cab`。 现在有 $N$ 个明文候选,每个候选记为 $S_i$,且长度均为 $M$。 接下来给出 $Q$ 个密文,请你将它们解密。第 $j$ 个密文为 $T_j$,它是把某个明文候选用恺撒密码加密所得的密文,每个密文独立地使用某个密钥加密。 保证每个明文候选在加密后能唯一确定,也就是说,不存在 $S_a$ 和 $S_b$($a \ne b$)在经过某种密钥 $k_a, k_b$ 加密后产生完全相同的密文的情况。

输入格式

输入通过标准输入给出,格式如下: > $N$ $M$ > $S_1$ > $S_2$ > $\vdots$ > $S_N$ > $Q$ > $T_1$ > $T_2$ > $\vdots$ > $T_Q$

输出格式

请输出 $Q$ 行。 第 $j$ 行输出将第 $j$ 个密文 $T_j$ 解密得到的明文。

说明/提示

### 样例说明 1 用密钥 $2$ 加密 `ayz` 得到 `cab`。 用密钥 $25$ 加密 `bbb` 得到 `aaa`。 ### 数据范围 - $1 \leq N \leq 200,000$ - $1 \leq M \leq 200,000$ - $1 \leq Q \leq 200,000$ - $M \max (N, Q) \leq 200,000$ - $N, M, Q$ 为整数 - $S_i, T_j$ 为仅包含小写英文字母且长度为 $M$ 的字符串 - 明文候选在加密后能被唯一确定 - $T_j$ 是明文候选之一经恺撒密码加密后所得 由 ChatGPT 5 翻译