#P1248. Safecracker
Safecracker
题目描述:破解克莱因保险箱
克莱因保险箱被藏在二楼图书馆一幅画后面的克莱因保险箱中。克莱因保险箱极为罕见,其中大部分连同克莱因和他的工厂在二战中被摧毁。幸运的是,研究部门的老布伦博在去世前记下了克莱因的秘密。克莱因保险箱有两个显著特征:使用字母而非数字的组合锁,以及保险箱门上刻有一段引文。
克莱因引文特点:
- 包含5到12个不同的大写字母(通常出现在句子开头)
- 会提及一个或多个数字
- 其中5个大写字母构成开启保险箱的组合
目标数字构造: 通过适当方式组合引文中所有数字,可以得到一个目标数字(具体构造方式属于机密)。
组合破解规则: 需要选择5个字母v、w、x、y、z(均来自给定字母集),满足以下方程(每个字母用其在字母表中的序号代替,A=1,B=2,...,Z=26)。组合即为vwxyz。若存在多个解,则选择字典序最大的组合。
示例: 给定目标数字1和字母集ABCDEFGHIJKL,一个可能的解是FIECB,因为:
实际上该案例存在多个解,最终正确的组合是LKEBA。克莱因认为将组合编码在雕刻中是安全的,因为即使知道秘密,也需要数月时间尝试所有可能性。当然,那时计算机还不存在。
任务: 开发一个程序来破解克莱因组合,为实地部署做准备。按照部门规定的标准测试方法进行。
输入格式
输入包含一行或多行,每行包含:
- 一个小于1200万的正整数target
- 一个空格
- 至少5个、最多12个不同的大写字母
最后一行以target为0和字母END表示输入结束。
输出格式
对于每一行输入,输出唯一的克莱因组合,若无解则输出"no solution"。使用示例如下所示格式。
示例输入/输出
输入 1:
1 ABCDEFGHIJKL
11700519 ZAYEXIWOVU
3072997 SOUGHT
1234567 THEQUICKFROG
0 END
输出 1:
LKEBA
YOXUZ
GHOST
no solution
来源:Mid-Central USA 2002