zoukankan      html  css  js  c++  java
  • hdu 4394 Digital Square ( 2012 MultiUniversity Training Contest 10 )

    http://acm.hdu.edu.cn/showproblem.php?pid=4394

    题意:

    M^2%10^x=N (x=0,1,2,3....),给你一个N,求M,x为0,1,2,3....其中一个数就行了。找不到M输出None
     也就是求N是某个数的平方的后缀(包括本身)。
    题解 :

      bfs  搜素每一种可能的情况 ,首先搜索 个位,然后十位 等等。。。。

     

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<set>
     7 #include<map>
     8 #include<queue>
     9 #include<vector>
    10 #include<string>
    11 #define Min(a,b) a<b?a:b
    12 #define Max(a,b) a>b?a:b
    13 #define CL(a,num) memset(a,num,sizeof(a));
    14 #define maxn  110
    15 #define eps  1e-6
    16 #define inf 9999999
    17 typedef  __int64  ll;
    18 using namespace std;
    19 ll n;
    20 struct node
    21 {
    22     ll k;
    23     ll x;
    24     node(ll a,ll b):k(a),x(b){}
    25     friend bool operator < (node a,node b)
    26     {
    27         return a.k > b.k ;
    28     }
    29 };
    30 ll f[20] ;
    31 void init()
    32 {
    33     int  i;
    34     f[0] = 1;
    35     for( i = 1 ; i<= 18;i++)
    36     {
    37         f[i] =f[i - 1]*10 ;
    38     }
    39 }
    40 void bfs()
    41 {
    42   priority_queue<node>que;
    43   que.push(node(0,0));
    44   int i ;
    45   while(!que.empty())
    46   {
    47 
    48       node a= que.top();que.pop();
    49       ll x = a.x ;
    50       ll k = a.k;
    51       if(x>=18)continue ;
    52 
    53       if((k*k) % f[x] == n)
    54       {
    55           printf("%I64d\n",k);
    56           return  ;
    57       }
    58 
    59       for( i = 0;i<=9;i++)//要从0 开始
    60       {
    61           ll tmp = i*f[x] + k;
    62           if((tmp%f[x + 1])*(tmp%f[x + 1])%f[x+1] == n%f[x + 1] )//剪枝
    63             que.push(node(tmp,x + 1));
    64       }
    65   }
    66   printf("None\n");
    67 
    68 }
    69 int main()
    70 {
    71     int t;
    72     init();
    73     scanf("%d",&t);
    74     while(t--)
    75     {
    76         scanf("%I64d",&n);
    77         int tmp = n%10;
    78         if(tmp == 2||tmp ==3||tmp == 7||tmp ==8)
    79         {
    80             printf("None\n");
    81             continue ;
    82         }
    83         bfs();
    84     }
    85 
    86 }

  • 相关阅读:
    Jquery-EasyUI学习2~
    IIS——发布网站
    一致性哈希算法
    利用ZTree链接数据库实现 [权限管理]
    Form表单提交的简要方式
    Redis学习之5种数据类型操作、实现原理及应用场景
    redis对比其余数据库
    ZooKeeper概述(转)
    Zookeeper-Zookeeper可以干什么
    Java内存分配及变量存储位置实例讲解
  • 原文地址:https://www.cnblogs.com/acSzz/p/2654793.html
Copyright © 2011-2022 走看看