poj 1426 Find The Multiple (bfs 搜索)
Time Limit: 1000MS | Memory Limit: 10000K | |||
Total Submissions: 18012 | Accepted: 7297 | Special Judge |
Description
digits.
Input
Output
Sample Input
2
6
19
0
Sample Output
10
100100100100100100
111111111111111111
Source
#include <iostream>
#include <queue>
#include <cstdio>
using namespace std;
void bfs(int n)
{
queue<__int64>q;//这里后面的数据可能会有大的,所以用个64位的就够了
q.push(1);
while(!q.empty())
{
__int64 x;
x=q.front();
q.pop();
if(x%n==0)//能够整除就直接输出
{
printf("%I64d\n",x);
return ;
}
q.push(x*10);//把x的10的倍数入队。
q.push(x*10+1);
}
}
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
bfs(n);
}
return 0;
}
自己用数组模拟队列写了一下;貌似效率比stl好了一些;
#include <cstdio>
#include <cstring>
long long q[2000000];
void bfs(int n)
{
int front=0;
int rear=0;
q[front]=1;
rear++;
long long temp;
while(rear>front)
{
temp=q[front];
if(temp%n==0)
{
break;
}
temp*=10;
q[rear]=temp;
rear++;
q[rear]=temp+1;
rear++;
front++;
}
printf("%lld\n",temp);
}
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
bfs(n);
}
return 0;
}
在网上还看到了大神的代码用了同余取模定理,还是有点没看懂。还有的直接用满二叉树模拟的队列。
(a*b)%n = (a%n *b%n)%n
(a+b)%n = (a%n +b%n)%n
再贴一段pl大牛关于此题的分析思路。以学习:
要m整除n,那么能够用对n的余数来表示当前的状态。
搜到一个余数为0的状态就能够了。
直接bfs出去。
假设当前的余数是r。添在当前答案后面的数为,k
那么新的余数。也就是新的状态为:
( r * 10 + k ) % n 。
这样最多200个状态,判重一下。能够非常快出解。
大牛的代码:
#include<iostream>
using namespace std;
int a[524300],i,n;
int main(){
while(cin>>n){
if (!n) break;
i=1; a[1]=1%n;
while(a[i]){i++; a[i]=(a[i/2]*10+i%2)%n;}
n=0; while(i){a[n++]=i%2;i>>=1;}
while(n--) cout<<a[n]; cout<<endl;
}
return 0;
}
这原来也是bfs,直接用一个满二叉树实现(左儿子是0,右儿子是1);
还是要多学习大神们的代码~
poj 1426 Find The Multiple (bfs 搜索)的更多相关文章
- POJ 1426 Find The Multiple --- BFS || DFS
POJ 1426 Find The Multiple 题意:给定一个整数n,求n的一个倍数,要求这个倍数只含0和1 参考博客:点我 解法一:普通的BFS(用G++能过但C++会超时) 从小到大搜索直至 ...
- POJ - 1426 Find The Multiple(搜索+数论)
转载自:優YoU http://user.qzone.qq.com/289065406/blog/1303946967 以下内容属于以上这位dalao http://poj.org/problem? ...
- POJ 1426 Find The Multiple BFS
没什么好说的 从1开始进行广搜,因为只能包涵0和1,所以下一次需要搜索的值为next=now*10 和 next=now*10+1,每次判断一下就可以了,但是我一直不太明白我的代码为什么C++提交会错 ...
- poj 1426 Find The Multiple ( BFS+同余模定理)
Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18390 Accepted: 744 ...
- POJ.1426 Find The Multiple (BFS)
POJ.1426 Find The Multiple (BFS) 题意分析 给出一个数字n,求出一个由01组成的十进制数,并且是n的倍数. 思路就是从1开始,枚举下一位,因为下一位只能是0或1,故这个 ...
- DFS/BFS(同余模) POJ 1426 Find The Multiple
题目传送门 /* 题意:找出一个0和1组成的数字能整除n DFS:200的范围内不会爆long long,DFS水过~ */ /************************************ ...
- 广搜+打表 POJ 1426 Find The Multiple
POJ 1426 Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25734 Ac ...
- POJ 1426 Find The Multiple(寻找倍数)
POJ 1426 Find The Multiple(寻找倍数) Time Limit: 1000MS Memory Limit: 65536K Description - 题目描述 Given ...
- POJ 1426 Find The Multiple (DFS / BFS)
题目链接:id=1426">Find The Multiple 解析:直接从前往后搜.设当前数为k用long long保存,则下一个数不是k*10就是k*10+1 AC代码: /* D ...
随机推荐
- [ Openstack ] OpenStack-Mitaka 高可用之 镜像服务(glance)
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- MySQL 的七种 join
建表 在这里呢我们先来建立两张有外键关联的张表. CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`tbl_dept`( `id` ...
- [转载]如何将OFBIZ(opentaps)默认数据库迁移至mysql((2
原文地址:如何将OFBIZ(opentaps)默认数据库迁移至mysql(利昂原创)作者:利昂 ofbiz自带的数据库是Derby,这是一种小型的适合与测试系统的数据库,但不适合在产品级系统中使用,所 ...
- win上配置nginx
win上配置nginx 网上配置nginx的教程大多都是linux上的,今天贴出来nginx在win上的配置,在此篇配置中,nginx代理了Tomcat以及node服务.配置如下: 注意:根据实际经验 ...
- 21、Django实战第21天:课程章节信息
在课程详情页中,点击"开始学习",就进入到这课程章节信息,这里面包含了两个页面:"章节"和评论 1.把course-video.html(章节).course- ...
- 微信小程序开发教程(五)开发框架:MINA
微信团队为小程序提供的框架命名为MINA应用框架.MINA框架通过封装微信客户端提供的文件系统.网络通信.任务管理.数据安全等基础功能,对上层提供一整套JavaScript API,让开发者能够非常方 ...
- bzoj4543[POI2014]Hotel
题目链接 bzoj4543 [POI2014]Hotel 题解 这不是裸地点分嘛 ,我真傻,真的 n^2 这不是是sb题,~滑稽 ~ 枚举点转换为无根树,暴力子树中点的深度 计数转移 令a b c d ...
- [LOJ6433]最大前缀和
深刻感受到自己的水平和机房里的其他人相差甚远,他们都是随手秒这个题的... $n$很小,考虑状压DP 当一个序列在某个位置取到最大前缀和后,意味着如果把后面的数抽出来单独成序列,那么它的每个前缀和都$ ...
- [SHOI2014]信号增幅仪
题目大意: 平面直角坐标系中散落着n个点,一个椭圆的长半轴在对于x轴逆时针旋转α度的角度上,且长半轴是短半轴的k倍. 问短半轴至少要多长才能覆盖所有的点? 思路: 首先把坐标顺时针旋转α度,然后把所有 ...
- cocos2d-x 扩展 修改 备注
1.引擎源码相关扩展 说明:class/cellsExt 下的全部文件为扩展文件,有auto字样的文件为生成文件,*.pkg文件为自动生成文件的接口配置档,参考tolua++,源文件中代在[s ...