51nod 1109 01组成的N的倍数
2017-07-30 09:40
239 查看
这个题我是用广搜做的,话题里面的抽屉原理没有想到怎么做。
搜索的时候节点记录两个值,一个是余数,一个是节点的编号,因为这是一颗二叉树,节点编号的二进制形式,刚好是我们需要的结果。对于余数,还要开一个数组去重。
#include<cstdio> #include<queue> #include<iostream> using namespace std; const int maxn = 1e6 + 5; bool f[maxn]; int n; struct p{ long long value, num; }a; void print(long long k){ if(k <= 1) printf("%lld", k); else{ print(k / 2); printf("%lld", k % 2); } } void bfs(){ a.value = 1; a.num = 1; queue<p> q; q.push(a); while(!q.empty()){ long long t = q.front().value; long long nu = q.front().num; q.pop(); int s = t * 10 % n; if(s == 0){ print(nu * 2); return; }else{ if(f[s] == 0){ f[s] = 1; a.value = s; a.num = nu * 2; q.push(a); } } s = (t * 10 + 1) % n; if(s == 0){ print(nu * 2 + 1); return; }else{ if(f[s] == 0){ f[s] = 1; a.value = s; a.num = nu * 2 + 1; q.push(a); } } } } int main(){ scanf("%d", &n); bfs(); return 0; }
相关文章推荐
- 51NOD 1109 01组成的N的倍数
- 51nod 1109 01组成的N的倍数
- 51nod-1109 01组成的N的倍数(宽搜)
- 51Nod-1109-01组成的N的倍数
- ACM_51nod_1109_01组成的N的倍数
- 【51Nod 1109】01组成的N的倍数
- 51nod 1109 01组成的N的倍数
- 51nod 1109 —— 01组成的N的倍数
- POJ 1426 Find The Multiple && 51nod 1109 01组成的N的倍数 (BFS + 同余模定理)
- 51nod 1109 —— 01组成的N的倍数
- 51nod 1109 01组成的N的倍数+
- 51nod 1109 01组成的N的倍数(bfs)
- 51nod 1109 01组成的N的倍数(宽搜+剪枝)
- 51nod 1109 01组成的N的倍数
- 51nod 1109 01组成的N的倍数【Bfs+同余定理剪枝】好题!
- 51nod 1109 01组成的N的倍数 (bfs)
- 51Nod 1109 01组成的N的倍数
- 51Nod - 1109 01组成的N的倍数 【bfs+同余定理】
- 51Nod-1109-01组成的N的倍数
- 51nod 1109 01组成的N的倍数 【dfs+剪枝+vector】