poj1426_模拟BFS
题意:给出一个200以内的数n,求出这个数的倍数M,使得M中只有0和1组成。M最多100位。
分析:这个题竟然用的是bfs的思想。不看讨论真的想不出来。思路是这样的:
1.最高位一定是1.curnum%n不为0时,说明curnum不符合要求。
2.判断curnum*10%n和(curnum*10+1)%n是否为0,不为0的话,令curnum=curnum*10和curnum*10+1继续做第二步。直到取余之后为0即可。
3.这样就会遇到大数存储的问题。可以这样解决:
令 (curnum*10+1)%n=a,求((curnum*10+1)*10+1)%m.
由定理
(a*b)%n = (a%n *b%n)%n
(a+b)%n = (a%n +b%n)%n
得((curnum*10+1)*10+1)%m=(a*10+1)%m.前一步操作得到的余数可以代替当前步的k值。
这样存储一个mod[]即可。
4.最后输出结果。比如求6的倍数。
用数组mod[]存储余数,其中mod[0]不使用,由mod[1]开始
那么mod中的余数依次为: 1 4 5 4 5 2 3 4 5 2 3 2 3 0 共14个
令i=14,通过观察发现,i%2恰好就是 6 的倍数的最低位数字
i/2 再令 i%2 ,恰好就是 6 的倍数的 次低位数字。。。
循环这个操作,直到i=0,就能得到 6的 01倍数(一个01队列),倒序输出就是所求
这样就完成了 *10操作到 %2操作的过渡。
代码
1 #include <iostream> 2 #include <stdio.h> 3 #include <memory.h> 4 using namespace std; 5 6 const int maxnum=524286; //这个数字是找的网上的。 7 int mod[maxnum]; 8 9 void digui(int m) 10 { 11 if(m==0) return ; 12 digui(m/2); 13 printf("%d",m%2); 14 } 15 16 int main() 17 { 18 int m,cnt; 19 while(scanf("%d",&m)!=EOF) 20 { 21 if(m==0) break; 22 memset(mod,0,sizeof(mod)); 23 cnt=1; 24 mod[cnt]=1; 25 cnt++; 26 while(1) 27 { 28 mod[cnt]=mod[cnt/2]*10%m; //模拟bfs 29 if(mod[cnt]==0) break; 30 cnt++; 31 mod[cnt]=(mod[cnt/2]*10+1)%m; 32 if(mod[cnt]==0) break; 33 cnt++; 34 } 35 digui(cnt); //递归比较费时间。 36 printf("\n"); 37 } 38 return 0; 39 }
转载于:https://www.cnblogs.com/pushing-my-way/archive/2012/07/30/2614541.html
poj1426_模拟BFS相关推荐
- csu 1536 Bit String Reordering(模拟 bfs+状态压缩)
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1536 题意: 输入n个只为 0或1 的数 形成一个排列 再输入m个数 每个数代表 目标排列 (样例 ...
- PAT甲级1094 The Largest Generation:[C++题解]邻接表存树、每层节点数量、vector模拟bfs层序遍历、bfs另类实现
文章目录 题目分析 题目链接 题目分析 来源:PAT网站 题意重述:求一棵树中结点数量最多的层数,并输出最大的数量. 分析:使用邻接矩阵存储树,bool型变量g[N][N] 邻接矩阵,如果有边 置为t ...
- Codeforces 676D Theseus and labyrinth 模拟+bfs
D. Theseus and labyrinth time limit per test 3 seconds memory limit per test 256 megabytes input sta ...
- 【BZOJ】1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机(模拟+bfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=1615 这种题..... #include <cstdio> #include <c ...
- 暴力技术(一)——BFS广(宽)度优先搜索
bfs算法思想及实现 以老鼠走迷宫为例,如果说DFS是一只老鼠将整个图走到底,那么BFS就是一群老鼠走迷宫,也可以称作"并行处理"的模拟.假设老鼠是无穷多的,这群老鼠进去后,在每个 ...
- Find The Multiple POJ - 1426(只包含01的十进制倍数(同余模定理))
Find The Multiple POJ - 1426 为了避免各位没心情看我的TLE 的过程,直接告诉你,最后两个代码是AC代码 bfs一位一位枚举,知道会爆LONG LONG 还是怀着侥幸心理试 ...
- 过去可忆,未来可期(随心录+杂记)
2019.5.30 去年的这个时候心智FAMILY已经在前往苏州的火车上愉快狂欢颓废了. 历史总是在重演,只是已经今非昔比,物是人非. 明天的机房就要空荡许多了啊,长达30天不能再和我的风浔凌大佬一起 ...
- [USACO1.4]母亲的牛奶 Mother's Milk
https://www.luogu.org/problemnew/show/P1215 题解:模拟+BFS /* *@Author: STZG *@Language: C++ */ #include ...
- Applese 走迷宫
https://ac.nowcoder.com/acm/contest/330/C C++版本一 std 题解: 搜索,模拟 BFS 求最短路. 注意点是状态要三维.d[x][y][0/1]表示在(x ...
最新文章
- mysql pstop_ps-top 用于MySQL的数据库top工具
- 关于android开发环境中sdk和adt更新到22.6之后多了appcompat_v7
- python安装步骤win10-教你如何在Win10系统安装Python?
- KnockOut绑定
- .net core 后台 post设置等待时间_[vueelementadmin]前端发送的post请求的数据,后端接收不到并报EOFException异常的解决方案...
- 江西省普通高考2021艺术楼统考成绩查询,统考成绩查询
- linux pn,Linux环境变量设置--总结
- 坚决反对“企业文学化”
- 软件测试加油站ic卡管理系统,加油站IC卡管理系统,加油机IC卡管理系统,加油站自助加油机功能介绍...
- 数值分析实验报告 matlab,数值分析方法与实验基于MATLAB实现
- MATLAB使用教程(一)——从零开始,基础,数据类型——新手来看
- 职场菜鸟捕食指北【相亲篇】
- 我将进化成一条狗(9)——基因治疗
- iOS复习中有关SDWebImage可能知识点总结
- 微信聊天记录删除后如何恢复?原来只要这样就可以了
- 屏蔽eslint检测某项报错
- 还在纠结芯片引脚需要加多大容值的电容吗?
- 分层强化学习综述:Hierarchical reinforcement learning: A comprehensive survey
- Milking Order(拓扑+二分+优先队列)
- 软件开发成本计价及相关问题
热门文章
- redis保存dataset
- 把时间投资在自己的未来
- 【Matlab】矩阵三角分解法求解方程组
- 云计算助力企业快速转型
- Windows10中的IIS10安装php manager和IIS URL Rewrite 2.0组件的方法
- iOS开发之 [NSNull length]:unrecognized selector sent
- 2015年百度之星初赛(1) --- D KPI
- 【一天一个shell命令】好管家-磁盘-du
- 项目管理在企业发展中的作用及未来的发展方向—— 来自项目管理群的讨论
- 最新Butterknife集成 全部方法(完整版)