poj 1426 Find The Multiple (bfs+同余定理)
来源:互联网 发布:北京公交卡充值软件 编辑:程序博客网 时间:2024/04/20 09:38
题目连接:
http://poj.org/problem?id=1426
题目描述:
给一个200以内的整数n,求一个每一位只含0,1的整数m,满足m是n的倍数。
知识储备:
1.同余模定理
(a*b)%n = (a%n *b%n)%n
(a+b)%n = (a%n +b%n)%n
2.建线段树的过程
解决问题:
如图所示,借助建立线段图,来分析这个问题,模拟双入口的bfs, 由图很容易得到每一位的余数 mod[i]=(mod[i/2]*10+i%2)%n, i为上图中的1,2,3,……(int)log2(i)+1表示从高到低的位数,1表示最高位,当某一个mod[i]=0时,说明最先在这位找到了一个满足条件的且位数最小的数,并且如果i为偶数,说明这位为0,i为奇数说明这位放的是1,i/2返回到它的上一位,如此直至返回到第一位。
总结思考:
用已知数据结构的思想,适当情况下,可以出其不意的巧妙的解题,所以要深刻领悟典型数据结构的思想,并灵活运用它。
#include<iostream>using namespace std;int mod[1100000];int main(){int i,j,n,save[110]; while(scanf("%d",&n)&&n) //类比线段树的建立 {mod[1]=1%n; //如果n是1的话,此时其为零for(i=2;mod[i-1]!=0;i++) //用i的值来确定,0还是1 { mod[i]=(mod[i/2]*10+i%2)%n; //同余定理+类似双口的Bfs i是偶数就放0,i是奇数就放1 }i--;j=0; while(i){save[j++]=i%2; //从头开始存低位 i=i/2; }for(i=j-1;i>=0;i--){printf("%d",save[i]); //从尾开始从高位读 }putchar('\n'); }}
- poj 1426 Find The Multiple (bfs+同余定理)
- poj 1426 Find The Multiple(bfs+同余定理)
- POJ 1426 Find The Multiple (BFS + 同余定理)
- poj 1426 Find The Multiple ( BFS+同余模定理)
- POJ 1426 Find The Multiple(BFS 同余模定理)
- poj 1426 Find The Multiple bfs+同余模定理
- POJ 1426 Find The Multiple(BFS+同余模定理)
- POJ 1426 Find The Multiple(同余模定理优化双入口BFS)
- 【POJ】1426 Find The Multiple(暴力|同余模定理|BFS)
- poj_1426 Find The Multiple(bfs + 同余模定理)
- POJ1426: Find The Multiple(bfs,同余定理)
- POJ 1426 Find The Multiple【同余模定理+BFS||二叉树+鸽巢】
- POJ1426-Find The Multiple(二叉树BFS + 同余定理)
- POJ 1426 Find The Multiple && 51nod 1109 01组成的N的倍数 (BFS + 同余模定理)
- poj 1416 Find The Multiple 同余模定理
- POJ1426 Find The Multiple(DFS||BFS||同余模定理)
- POJ 1465 Multiple (BFS,同余定理)
- POJ--1465--Multiple【BFS+同余定理】
- 用Detours实现APIHOOK
- How to Get Virtual Desktops on Windows with Dexpot
- TestNG 八 并发测试
- C# Socket TCP 协议接收器
- 记录--嵌套类和局部类
- poj 1426 Find The Multiple (bfs+同余定理)
- paip.从HTML select 获取数据
- android meta-data
- nfs挂载文件系统
- 哈佛为什么群星闪耀?
- JavaScript 创建类/对象的几种方式
- [Happy DSA] 程序实现绘制箭头的原理
- win7 下安装mysql服务起不来的的问题
- 第四天课程