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 翻译