#P16620. [GKS 2017 #C] Ambiguous Cipher

[GKS 2017 #C] Ambiguous Cipher

题目描述

Susie 和 Calvin 是同班同学。Calvin 希望在课堂上给 Susie 传纸条时,不被老师或其他同学知道他们谈论的内容,以防纸条落入不该看到的人手中。Calvin 设计了一套加密系统来加密他的消息。

Calvin 每次只传给 Susie 一个单词,该单词仅由大写字母组成,因为 Calvin 非常兴奋能与 Susie 交流。每个单词的加密方式如下:

  • Calvin 根据字母在字母表中的位置为每个字母分配一个数字,其中 A=0\text{A} = 0B=1\text{B} = 1,…,Z=25\text{Z} = 25
  • 对于单词中的每个字母,Calvin 通过将该字母相邻的 1122 个字母的值相加,来确定该字母的加密值。他取该和对 2626 取模,得到该字母的新值。然后 Calvin 再根据字母表位置将数值转换回大写字母。
  • 加密后的单词是通过对单词中的每个字母使用此方法加密得到的。每个字母的加密仅基于原始未加密消息中的字母,而不依赖于任何已经加密过的字母。

让我们来看 Calvin 正在为 Susie 写的其中一张便条。由于 Calvin 总是很饿,他想让 Susie 知道他还想吃东西。Calvin 对单词 SOUP 进行加密的过程如下:

  • S=18\text{S}=18O=14\text{O}=14U=20\text{U}=20P=15\text{P}=15
  • Calvin 根据每个字母相邻字母的值对其进行加密:
    • 第一个字母:14mod26=1414 \bmod 26 = 14
    • 第二个字母:(18+20)mod26=12(18+20) \bmod 26 = 12
    • 第三个字母:(14+15)mod26=3(14+15) \bmod 26 = 3
    • 第四个字母:20mod26=2020 \bmod 26 = 20
  • 数值 14,12,3,2014, 12, 3, 20 对应的字母为 OMDU,这就是 Calvin 会在便条上写给 Susie 的加密单词。

保证 Calvin 不会发送给 Susie 任何完全无法解密的单词。例如,Calvin 不会发送单词 APE,因为它没有任何有效的解密(即,不存在一个单词,Calvin 对其加密后能得到 APE)。

然而,Calvin 的系统并不完美,他发送给 Susie 的一些单词实际上可以解密成多个单词,从而产生歧义!例如,BCB 可以解密成 ABCCBA 等可能性。

Susie 昨晚为了完成学校项目又熬了一个通宵,她实在太累,无法解密 Calvin 的消息。她需要你的帮助!

输入格式

输入的第一行给出测试用例的数量 TT。接下来有 TT 个测试用例。每个测试用例是一行,包含一个由大写字母组成的字符串 WW:Calvin 发送的加密单词。

输出格式

对于每个测试用例,输出一行,格式为 Case #x: y,其中 xx 是测试用例编号(从 11 开始),yy 是解密后的单词,如果无法唯一确定解密后的单词,则输出 AMBIGUOUS

3
OMDU
BCB
AOAAAN
Case #1: SOUP
Case #2: AMBIGUOUS
Case #3: BANANA

提示

请注意,最后一个样例不会出现在小数据集中。

样例 #1 和 #2 已在题目描述中解释。

在样例 #3 中,BANANA 是唯一加密后得到 AOAAAN 的单词。

限制条件

1T1001 \le T \le 100

WW 仅由大写英文字母组成。

WW 可以解密为一个或多个单词(即 WW 是某个单词加密后的结果)。

WW 不会解密成单词 AMBIGUOUS(你只会在解密存在歧义时输出该词)。

小数据集(测试集 1 – 可见)

22 \le WW 的长度 4\le 4

大数据集(测试集 2 – 隐藏)

22 \le WW 的长度 50\le 50

翻译由 DeepSeek V4 Pro 完成