HDU 4394Digital Square

来源:互联网 发布:linux系统删除文件命令 编辑:程序博客网 时间:2024/05/21 22:47

Digital Square

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 10   Accepted Submission(s) : 6
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[sup]9[/sup]), indicating the given number.
 

Output
For each case output the answer if it exists, otherwise print “None”.
 

Sample Input
332125
 

Sample Output
None115
 

Source
2012 Multi-University Training Contest 10
 

简单搜索题,判断几位数相乘后对余数没有影响就好


#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;int t,n;long long Mod;struct node{    long long num;    long long ten;    friend bool operator < (node a,node b)    {        return a.num>b.num;    }} a,b;void bfs(){    priority_queue<node>q;    int num=n%10;    for(int i=0; i<10; i++)        if(i*i%10==num)        {            a.num=i;            a.ten=10;            q.push(a);        }    while(q.size())    {        a=q.top();        if(a.num*a.num%Mod==n)        {            cout<<a.num<<endl;            return ;        }        q.pop();        for(long long i=0; i<10; i++)        {            b.num=a.num+i*a.ten;            b.ten=a.ten*10;            if(b.num*b.num%b.ten==n%b.ten)            {                q.push(b);            }        }    }    cout<<"None"<<endl;    return ;}int main(){    scanf("%d",&t);    while(t--)    {        cin>>n;        int nn=n;        Mod=1;        while(nn)        {            Mod*=10;            nn/=10;        }        bfs();    }}


0 1
原创粉丝点击