Digital Square(hdu4394)搜索
Digital Square
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1310 Accepted Submission(s):
501
nonnegative integer M.M meets the follow condition:
M2%10x=N (x=0,1,2,3....)
number of test cases.
For each case, each line contains one integer N(0<=
N <=109), indicating the given number.
print “None”.
eg:n 为 21; 那么,我们从个位数1开始搜, 1 * 1 = 1, 9 * 9 = 81,他们的个位数都是1,那么,1和9可以作为我们找的那个数的个位数。
然后我们就记忆一下这个我们找到的东西,放在ans里面。
下面我们开始搜第二位,设搜的是ab的a(其中,我们的b是已经记忆下来的个位)。
ab * ab % 100 = 21; 那么,我们的 是不是就由(b * b / 10 + a * b * 2) % 10 得到的(看不出来的可以拿纸笔算一下;)。未知数就只有a吧,那么,我们就for一遍去找a,找到a了,我们就以同样的方法去找c(如果有c的话)。这样,就是剪枝了。
最后,如果我们找的n有x位,那么,我们要找的m * m % ? == n 的m最多也只有x位。至此,就结束了。
ps:http://acm.hdu.edu.cn/showproblem.php?pid=4394
详见代码
#include <cstdio>
#include<iostream>
#define INF 0xfffffff
#define ll __int64
using namespace std; ll t,digit[],num,n,ans,r,final; ll min(ll a, ll b)
{
return a > b? b : a;
}
void get(ll t) //得到num = n的位数,digit[]存每个位上分别是什么。
{
num=;
while(t)
{
digit[ ++num] = t % ;
t/=;
}
}
void solve(ll p,ll w,ll ans)
{
if(p>num)
{
final=min(final,ans);
return ;
}
for(ll k = ;k<;k ++)
{
if( (ans*ans/w + r*k%)%==digit[p])//(b * b / 10 + a * b * 2) % 10,,,r=2*ans
solve(p+,w*,k*w+ans);
}
}
int main()
{
scanf("%I64d",&t);
while(t--)
{
scanf("%I64d",&n);
get(n);
if(digit[]==||digit[]==||digit[]==||digit[]==)
{
puts("None");
continue;
}
final = INF;
for(ll i=;i<;i++)
{
if(i*i%==digit[])
{
r=i<<; //r为余数2*ans
solve(,,i);
}
}
if(final==INF)
puts("None");
else
printf("%I64d\n",final);
}
return ;
}
当然也可以不用这么麻烦直接dfs
只是时间问题。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath> using namespace std;
typedef __int64 ll; struct Node
{
ll num;
int len;//长度
bool operator < (const Node &p) const
{
return p.num<num;
}
};
ll n,ans; ll kpow(int x)
{
ll kk=;
for(int i=;i<x;i++)
kk=kk*;
return kk;
}
bool bfs()
{
priority_queue<Node>Q;
Node p,q;
p.num=,p.len=;
Q.push(p);
while(!Q.empty())
{
p=Q.top();
Q.pop();
ll tmp=kpow(p.len);
if(p.num*p.num%tmp==n)
{
ans=p.num;
return true;
}
//扩展
for(int i=; i<; i++)
{
q.len=p.len+;
q.num=p.num+i*tmp;
if(q.num*q.num%(tmp*)==n%(tmp*))
Q.push(q);
}
}
return false;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%I64d",&n);
int temp=n%;
if(temp==||temp==||temp==||temp==)
{
puts("None");
continue;
}
if(bfs())
printf("%I64d\n",ans);
else
puts("None");
}
return ;
}
Digital Square(hdu4394)搜索的更多相关文章
- Digital Square 搜索
Digital Square Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Subm ...
- hdu 4394 Digital Square(bfs)
Digital Square Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 4394 Digital Square
Digital Square Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu Digital Square(广搜)
题目:给出n,求出最小的m,满足m^2 % 10^k = n,其中k=0,1,2 http://acm.hdu.edu.cn/showproblem.php?pid=4394 只要有一个x满足条件便 ...
- 2012 Multi-University #10
容斥原理 A Number Sequence 题意:给出n个数,b1,b2,b3……bn,构造n个数,a1,a2,……an(ai>1),使得a1*a2*a3……an=b1*b2……bn 分析:容 ...
- Project Euler 80:Square root digital expansion 平方根数字展开
Square root digital expansion It is well known that if the square root of a natural number is not an ...
- ural 1698. Square Country 5(记忆化搜索)
1698. Square Country 5 Time limit: 2.0 secondMemory limit: 64 MB The first arithmetical operation ta ...
- 杭电1518 Square(构成正方形) 搜索
HDOJ1518 Square Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Leetcode之深度优先搜索(DFS)专题-473. 火柴拼正方形(Matchsticks to Square)
Leetcode之深度优先搜索(DFS)专题-473. 火柴拼正方形(Matchsticks to Square) 深度优先搜索的解题详细介绍,点击 还记得童话<卖火柴的小女孩>吗?现在, ...
随机推荐
- Linux Shell脚本编程提高(12)
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核,不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序.Shel编程语言具有普通编程 ...
- Linux系统Bash的常用功能(9)
了解了基本的Linux文件文件系统的概念后,我们将更深入的了解一下Linux的其他方面的内容,那就是我们所使用的用户接口,也就是大家常听到的 『Shell』 ,『这个shell并不是黑客反弹的shel ...
- Linux高级文件系统管理(8)
如果您的 Linux 服务器有多个用户经常存取数据时,为了维护所有使用者在硬盘容量的公平使用,磁碟配额 (Quota) 就是一项非常有用的工具,另外,如果你的用户常常抱怨磁盘容量不够用,那么更进阶的文 ...
- MariaDB 数据库索引详解(9)
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...
- 13_python_内置函数
- cad2015卸载/安装失败/如何彻底卸载清除干净cad2015注册表和文件的方法
cad2015提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装cad2015失败提示cad2015安装未完成,某些产品无法安装,也有时候想重新安装cad2015 ...
- mybatis 插件原理
[传送门]:mybatis 插件原理
- js获取n分钟(或n小时或n个月)后(或前)的时间(日期)
标题有点绕,其实意思就是根据系统当前时间,获取n分钟或n小时或n个月后的时间. 例如:当前时间下,获取10分钟后的时间. var date=new Date(); //1. js获取当前时间 var ...
- php5.3新垃圾回收机制详解
php的垃圾回收机制主要参考了http://blog.csdn.net/phpkernel/article/details/5734743 这文章. 变量对应的值,比如 $a="abc&qu ...
- [原创]K8一句话密码爆破工具{秒破10万} 支持ASP/PHP/ASPX/JSP/CFM/DIY
工具: K8_FuckOneShell 20161224编译: VS2012 C# (.NET Framework v4.0)组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http ...