HDU 4394 Digital Square【搜索】

题意: M2%10x=N   ,给出n值,找到满足等式的最小m值,x=(0,1,2...)。

分析: 由于M的位数不可能超过n的位数,可以从n的最后一位开始逐位搜索。

#include<stdio.h>
#include<string.h>
const __int64 INF=999999999;
__int64 num[25];
__int64 min(__int64 a,__int64 b)
{
    return a<b?a:b;
}
__int64 ans,n;
int top;
__int64 p;
void dfs(int pos,__int64 w,__int64 res)
{
    if(top<=pos)
    {
        ans=min(ans,res);
        return;
    }

    for(__int64 k=0; k<10;k++){
        if((res*res/w+p*k%10)%10==num[pos])
            dfs(pos+1,w*10,k*w+res);
    }
}
int main()
{
    int t;
    __int64 i,tmp;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%I64d",&n);
        top=0;
        tmp=n;
        while(tmp)
        {
            num[top++]=tmp%10;
            tmp/=10;
        }
        ans=INF;
        for(i=0;i<=9;i++)
            if(i*i%10==num[0])
            {
                p=i<<1;
                dfs(1,10,i);
            }
        if(ans==INF)
            printf("None\n");
        else printf("%I64d\n",ans);
    }
    return 0;
}

 

posted @ 2012-08-25 10:54  'wind  阅读(278)  评论(0编辑  收藏  举报