最近一直在刷字符串和线段树,也越来越少玩高校俱乐部,无聊看到一题N的N次方的问题,脑海中各种打表就涌现出来了。
弄了不一会儿,就写完了,马上提交,但是系统好像出了问题,提示“哦哦,出了点状况”,但是分数加了上去并且挑战成功也有我……
到现在我还不知道我的做法对,或者不对,暂且我就当作是对吧……
来看题目:
我在计算N的N次方,给出结果a,你能否求出N呢?我给出的结果会出错,但是如果出错的话,我保证和正确地结果只有一个数字不对(不会增加或者减少数字)。给出输入,求输出的整数(保证结果在int范围内),输入用字符串表示,长度不超过500000,无首0。如果证明我出错了,请输出-1。例如,输入27,输出3。而输入20,只能输出-1了。输入格式:多组数据,第一行是 T,表示数据组数。以下T行,每行是一个大整数。输出格式对每组数据,输出一行答案。
输入样例
4
3
4
3225
387420489
输出样例:
-1
2
-1
9
我简单说一下我的思路:
500000位数,N大概去到1600,也就是只有1600个可能。
这时我就想,直接贴表吧!
但是50万位啊,复制粘帖都心碎……
后来我就想,太稀疏了,用hash吧,而hash函数怎么设置呢?
一个很自然的想法就是把所有的位数加起来即可。
即 for(i=0;i<n;i++) key+=a[i];
后来,想了一下,这样hash的结果好像不是很准确……
所以我又写多了hash,平方和……还是很自然的想法
for(i=0;i<n;i++) key+=a[i]*a[i];
这样我就可以只需要贴1600行了……
哇拉拉地打了一个表,贴了一下……好像是过了。
(注意,如果你不懂大数n^n次方,1你可以学习一下大数。2.你可以用java来水)
后来,我用另外一个号测试只用hash2,好像也得分了……
求大神的各种做法。
不给发代码啊……这是怎么敏感了……
有兴趣的可以联系我……