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 }

  • 相关阅读:
    『数学』--数论--组合数+卢卡斯定理+扩展卢卡斯定理
    Lucene高亮
    Linux 计划任务
    Lucene.net(4.8.0) 学习问题记录二: 分词器Analyzer中的TokenStream和AttributeSource
    Asp.net Core 异步调用 Task await async 的梳理
    Asp.net core 中的依赖注入
    Lucene.net(4.8.0) 学习问题记录一:分词器Analyzer的构造和内部成员ReuseStategy
    Git 使用篇二:小组协作开发
    Git 使用篇二:搭建远程服务器
    Git 使用篇一:初步使用GitHub,下载安装git,并上传项目
  • 原文地址:https://www.cnblogs.com/acSzz/p/2654793.html
Copyright © 2011-2022 走看看