hdu Digital Square(广搜)
2013-06-27 12:29
316 查看
题目:给出n,求出最小的m,满足m^2 % 10^k = n,其中k=0,1,2
http://acm.hdu.edu.cn/showproblem.php?pid=4394
只要有一个x满足条件便行了
我们可以初步发现,某个数个位确定,那么平方的最后一位肯定是确定的,那么如果后两们确定,那么平方的最后两们也是确定的,这可以通过乘法的规律得到
那我们只需要BFS一下,不断地找满足最后指定位数的数,1位,2位,……直到找到第一个满足条件的。
注意这里可能是100001这种情况
所以记录当前数字大小,当前位置,可能暂时的高位为0,以后下一个添加的数为多少.
http://acm.hdu.edu.cn/showproblem.php?pid=4394
只要有一个x满足条件便行了
我们可以初步发现,某个数个位确定,那么平方的最后一位肯定是确定的,那么如果后两们确定,那么平方的最后两们也是确定的,这可以通过乘法的规律得到
那我们只需要BFS一下,不断地找满足最后指定位数的数,1位,2位,……直到找到第一个满足条件的。
注意这里可能是100001这种情况
所以记录当前数字大小,当前位置,可能暂时的高位为0,以后下一个添加的数为多少.
// Time 0ms; Memory 316K
#include<iostream> #include<queue> using namespace std; #define ll long long ll n,ans; struct node { ll l,s; }; void bfs() { queue<node>q; node x,y; x.l=1;x.s=0; q.push(x); ans=-1; while(!q.empty()) { x=q.front();q.pop(); for(ll i=0;i<10;i++) { y.s=x.s+i*x.l; y.l=x.l*10; if((y.s*y.s)%y.l==n%y.l) { if((y.s*y.s)%y.l==n) { if(ans==-1 || ans>y.s) ans=y.s; else if(ans==y.s) return; } q.push(y); } } } return; } int main() { int t; cin>>t; while(t--) { cin>>n; if(n==0) { cout<<"0"<<endl;continue; } bfs(); if(ans>0) cout<<ans<<endl; else cout<<"None"<<endl; } return 0; }
相关文章推荐
- Digital Square HDU - 4394 (数论)(DFS)
- hdu 4394 Digital Square 记忆化搜索
- Digital Square(HDU-4394)
- HDU 4394 - Digital Square(BFS+乘法原理)
- hdu 4394 Digital Square(搜索:DFS)
- hdu 4394 Digital Square
- (dfs) hdu 4394 Digital Square
- HDU-4394 Digital Square BFS搜索
- HDU 4394 Digital Square
- hdu Digital Square(广搜)
- HDU 4394 Digital Square【搜索】
- hdu 4394 - Digital Square (dfs or bfs)
- HDU 4394 Digital Square [搜索]
- HDU 1518题 Square (DFS)
- hdu1163-Eddy's digital Roots
- HDU 3826 Squarefree number (求因子里没有平方数的数)
- hdu 1518 Square (dfs)
- HDU - 6125 Free from square 分组背包+状态压缩
- hdu 题目1518 Square (DFS)
- [HDU 5079][2014 Asia AnShan Regional Contest]Square(DP套DP)