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) 深度优先搜索的解题详细介绍,点击 还记得童话<卖火柴的小女孩>吗?现在, ...
随机推荐
- nodejs学习(imooc课程笔记, 主讲人Scott)
课程地址: 进击Node.js基础(一) 进击Node.js基础(二) 1. nodejs创建服务器 var http = require('http'); //加载http模块 //请求进来时, 告 ...
- [BZOJ2738]矩阵乘法(整体二分+二维树状数组)
整体二分+二维树状数组. 好题啊!写了一个来小时. 一看这道题,主席树不会搞,只能用离线的做法了. 整体二分真是个好东西,啥都可以搞,尤其是区间第 \(k\) 大这种东西. 我们二分答案,然后用二维树 ...
- SQLServer——SQLServer链接外部数据源
学习链接:https://www.cnblogs.com/licin/p/6244169.html 一.新建ODBC数据源 1.打开控制面板→管理工具→ODBC数据源→系统DSN 2.添加新系统数据源 ...
- (转)Python开发程序:支持多用户在线的FTP程序
原文链接:http://www.itnose.net/detail/6642756.html 作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ...
- 【从0到1学Web前端】CSS定位问题一(盒模型,浮动,BFC) 分类: HTML+CSS 2015-05-27 22:24 813人阅读 评论(1) 收藏
引子: 在谈到css定位问题的时候先来看一个小问题: 已知宽度(假如:100px)div框,水平居中,左右两百年的分别使用div框填充.且左右div自适应. 效果如下图: 这个问题的难点主要是浏览器宽 ...
- Mysql大数据表优化处理
原文链接: https://segmentfault.com/a/1190000006158186 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表 ...
- JDK的windows和Linux版本之下载(图文详解)
不多说,直接上干货! 简单说下,Eclipse需要Jdk,MyEclipse有自带的Jdk,除非是版本要求 http://www.oracle.com/technetwork/java/javase/ ...
- JavaScript -- Document-Element
-----046-Document-Element.html----- <!DOCTYPE html> <html> <head> <meta http-eq ...
- Java总结:开发环境
更多请查看在线文集:http://android.52fhy.com/java/index.html Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言 ...
- JavaServer Faces生命周期概述
JavaServer Faces应用程序的生命周期在客户端为页面发出HTTP请求时开始,并在服务器响应该页面并转换为HTML时结束. 生命周期可以分为两个主要阶段:执行和渲染.执行阶段进一步分为子阶段 ...