POJ1426-Find The Multiple(二叉树BFS + 同余定理)
2017-11-26 12:15
411 查看
/** 题意: 给你一个数n,求出n的倍数m,要求m的十进制必须全部由1和0组成 题解: 首先可以用BFS来求这个m 第一个位置(最高位)必须为1(因为是10进制首位为0就没有意义了) 于是对于下一个位置就有0,1两种方向 这个数的大小为 num[i/2]*10+num[i] 由于这个数可能会很大,当递归层数到达10层时就会爆int。 发现要求n的倍数 m 则 m%n == 0, 于是我们只需要用num存储 m % n 的余数就可以了. 但是递归深度呢,这个只能测试下.毕竟n最大只有200 (num的数组大小 = 2 ^ (hight - 1) ); 怎么感觉有点像Huffman树 2333 */ /** wtf! 6e5: memset : 532ms 不用: 32ms ....为什么会相差这么多 */ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> using namespace std; const int maxn = 6e5; ///经过测试当n = 198 二叉树的高度为 19 n = 2^19 < 6e5 int mod[maxn]; vector<int> ans; int main() { int n; while(~scanf("%d",&n),n) { ans.clear(); //memset(mod,0,sizeof(mod)); //虽然这个没必要初始化 mod[1] = 1 % n; int i; for(i=2;mod[i-1];i++) mod[i] = (mod[i/2]*10+i%2)%n; i--; while(i) { ans.push_back( i % 2); i /= 2; } for(int i=ans.size()-1;i>=0;i--) printf("%d",ans[i]); printf("\n"); } return 0; }
相关文章推荐
- POJ 1426 Find The Multiple (BFS + 同余定理)
- POJ 1426 Find The Multiple(数论——中国同余定理)
- POJ1426-Find The Multiple
- POJ-1426 Find The Multiple 解题报告
- poj_1426 Find The Multiple(bfs + 同余模定理)
- POJ 1426 Find The Multiple
- POJ - 1426 - Find The Multiple (DFS)
- POJ Find The Multiple 1426 (搜索)
- POJ 1426-Find The Multiple【搜索】
- POJ 1426 Find The Multiple (BFS基础)
- Find The Multiple(POJ--1426
- poj1426 - Find The Multiple [bfs 记录路径]
- Find The Multiple(POJ 1426)
- POJ 1426 Find The Multiple (BFS)
- Find The Multiple-POJ-1426-BFS
- ACM篇:POJ 1426--Find The Multiple
- poj1426-Find The Multiple
- POJ 1426 Find The Multiple(同余模定理优化双入口BFS)
- poj 1426 Find The Multiple
- POJ-1426-Find The Multiple(DFS)