#P1248. Safecracker

Safecracker

题目描述:破解克莱因保险箱

克莱因保险箱被藏在二楼图书馆一幅画后面的克莱因保险箱中。克莱因保险箱极为罕见,其中大部分连同克莱因和他的工厂在二战中被摧毁。幸运的是,研究部门的老布伦博在去世前记下了克莱因的秘密。克莱因保险箱有两个显著特征:使用字母而非数字的组合锁,以及保险箱门上刻有一段引文。

克莱因引文特点

  • 包含5到12个不同的大写字母(通常出现在句子开头)
  • 会提及一个或多个数字
  • 其中5个大写字母构成开启保险箱的组合

目标数字构造: 通过适当方式组合引文中所有数字,可以得到一个目标数字(具体构造方式属于机密)。

组合破解规则: 需要选择5个字母v、w、x、y、z(均来自给定字母集),满足以下方程(每个字母用其在字母表中的序号代替,A=1,B=2,...,Z=26)。组合即为vwxyz。若存在多个解,则选择字典序最大的组合。

vw2+x3y4+z5=targetv - w^2 + x^3 - y^4 + z^5 = target

示例: 给定目标数字1和字母集ABCDEFGHIJKL,一个可能的解是FIECB,因为:

692+5334+25=16 - 9^2 + 5^3 - 3^4 + 2^5 = 1

实际上该案例存在多个解,最终正确的组合是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