Digital Square(hdu 数论 4394,bfs求后n位相同)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 462 Accepted Submission(s): 225
Problem Description
Given an integer N,you should come up with the minimum nonnegative integer M.M meets the follow condition: M2%10x=N (x=0,1,2,3....)
Input
The first line has an integer T( T< = 1000), the number of test cases.
For each case, each line contains one integer N(0<= N <=10
9), indicating the given number.
Output
For each case output the answer if it exists, otherwise print “None”.
Sample Input
3
3
21
25
Sample Output
None
11
5
Source
Recommend
zhuyuanchen520
思路转自某神,,,看了才会的,,,,哎。。。。。继续加油!
M^2%10^x=N (x=0,1,2,3....),给你一个N,求M,x为0,1,2,3....其中一个数就行了。找不到M输出None
也就是求N是某个数的平方的后缀(包括本身)。
思路:
BFS。
首先证明出N位后缀只与M的后N位有关。
比如三位数100a+10b+c平方后展开为
10000a^2+2000ab+100b^2+200ac+20bc+c^2
很显然,平方后的最后一位只与c有关
最后两位只与bc有关,最后三位abc都有关
可以类推出上面的结论。
然后从个位开始广搜,逐位满足N, 每扩展
要判断一次是否为解。(有可能后面位数满足
的同时前面位数自动满足了)。注意有解时一
定要搜索这一层的所有解,输出最小解 。
PS:要注意小细节如1000000000的情况,挂在这里好久。。。
View Code 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include