P12946 [GCJ Farewell Round #1] Colliding Encoding
题目描述
**Alan** 今天在学校上了第一节密码学课程。他决定运用所学知识,设计自己的加密方式。他计划将字母 `A` 到 `Z` 分别映射到十进制数字 $0$ 到 $9$。然后,他会将每个单词中的字母替换为对应的数字,从而将单词编码为一个由数字组成的字符串。
由于过于兴奋,**Alan** 没有注意到英文字母共有 $26$ 个,而十进制数字只有 $10$ 个。因此,可能会出现**碰撞**,即不同的单词被编码为相同的字符串。
给定 **Alan** 想要编码的 $N$ 个单词及其使用的映射规则,请判断列表中是否存在至少一对单词会发生碰撞。
输入格式
输入的第一行包含测试用例的数量 $T$。随后是 $T$ 个测试用例。
每个测试用例的第一行包含 $26$ 个十进制数字($0$ 到 $9$ 的整数)$D_A$, $D_B$, …, $D_Z$,表示 **Alan** 使用的映射规则。字母 $\alpha$ 被映射为数字 $D_\alpha$。
每个测试用例的第二行包含一个整数 $N$,表示 **Alan** 需要编码的单词数量。
接下来的 $N$ 行中,第 $i$ 行包含一个字符串 $S_i$,表示 **Alan** 要编码的第 $i$ 个单词。
输出格式
对于每个测试用例,输出一行 `Case #x: y`,其中 $x$ 是测试用例编号(从 $1$ 开始),$y$ 为 `YES`(如果列表中至少存在一对不同单词的编码相同)或 `NO`(否则)。
说明/提示
**样例解释**
在样例 #1 中,`A` 映射为 $0$,`B` 为 $1$,`C` 为 $2$,`D` 为 $3$,`E` 为 $3$。此时,`ABC` 编码为 $012$,`BC` 为 $12$,`BCD` 为 $123$,`CDE` 为 $233$。由于所有编码均不同,因此没有碰撞。
在样例 #2 中,`C` 映射为 $2$,`D` 为 $3$,`E` 为 $3$,`F` 为 $3$,`G` 为 $3$。此时,`CDE` 编码为 $233$,`DEF` 和 `EFG` 均为 $333$。由于 `DEF` 和 `EFG` 的编码相同,因此存在碰撞。
**数据范围**
- $1 \leq \mathbf{T} \leq 100$。
- 对于所有 $\alpha$,$0 \leq \mathbf{D}_{\alpha} \leq 9$。
- 对于所有 $i$,$1 \leq \mathbf{S}_{i}$ 的长度 $\leq 10$。
- 对于所有 $i$,$\mathbf{S}_{i}$ 的每个字符均为大写字母 `A` 到 `Z`。
- 对于所有 $i \neq j$,$\mathbf{S}_{i} \neq \mathbf{S}_{j}$。
**测试集 1(4 分,可见判定)**
- $1 \leq \mathbf{N} \leq 100$。
**测试集 2(10 分,可见判定)**
- $1 \leq \mathbf{N} \leq 6 \times 10^{4}$。
翻译由 DeepSeek V3 完成