木其网络科技专业程序员代写http://www.xmsydw.com
程序员学历擅长经验网店链接
apenny硕士ASP.NET PHP 电子 通信设计 图像 编程 网络5年进入店铺
zheng_qianqian本科C语言 C++面向对象 Java3年进入店铺
guoguanl本科Java Web项目 JSP Hibernate Struts Mysql4年进入店铺

hdu Digital Square(广搜)

题目:给出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,以后下一个添加的数为多少.


// 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;
}


posted @ 2013-06-27 12:29  C语言程序  阅读(273)  评论(0编辑  收藏  举报
木其网络科技专业程序员代写http://www.xmsydw.com
程序员学历擅长经验网店链接
apenny硕士ASP.NET PHP 电子 通信设计 图像 编程 网络5年进入店铺
zheng_qianqian本科C语言 C++面向对象 Java3年进入店铺
guoguanl本科Java Web项目 JSP Hibernate Struts Mysql4年进入店铺