(题目是英文,我翻译为中文大概意思):
在古代有个数学家为了加密一批文件,用了一个加密算法,加密算法大概如下:
26个大写英文字母分别带表1到26个数字(即A=1,B=2…Z=26),现在他编了一个公式:
v-w^2+x^3-y^4+z^5=target
现在我们输入一个target(target为一个长整型数),和一串字符号(如”ABCDEFGHIJKL”),则式子意思为v,w,x,y,z分别可以取字符串中任一英文字母对应的数子,从而使式子成立.
例如输入:1 ABCDEFGHIJKL
由于输入了ABCDEFGHIJKL,所以v,w,x,y,z的可选取值数就是1,2,3,4,5,6,7,8,9,10,11,12,从而当取v=6,w=9,x=5,y=3,z=2使等式成立(即6 – 9^2 + 5^3 – 3^4 + 2^5 = 1).所以输出为v w x y z对应的字母,即FIECB(69532),如果同一个target有多解,则按英文字典顺序取最大者(等于strcmp操作取最大),所以上面不应该输出FIECB,因为有个比它更大的解LKEBA,所以应输出LKEBA.如果没有解决方案则输出”no solution”
现在我的算法主要问题是超出时间限制,即输入”1 ABCDEFGHIJKLMNOPQRSTUVWXYZ”时,输出答案所需时间为5秒,但它限制为1秒,请问哪位大虾有办法帮个忙~~(希望用C++)
>> 本文固定链接: http://www.vcgood.com/archives/2039