【51Nod 1109】01组成的N的倍数
2016-10-30 07:46
357 查看
Description
给定一个自然数N,找出一个M,使得M > 0且M是N的倍数,并且M的10进制表示只包含0或1。求最小的M。例如:N = 4,M = 100。
Solution
开始用深搜做了一下,结果不行,很显然不行,打开话题看了一下,改成用广搜做了一下。可以了!!Code
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #define fo(i,a,b) for(i=a;i<=b;i++) #define fod(i,a,b) for(i=a;i>=b;i--) using namespace std; typedef long long ll; int i,j,k,l,t,n,m,now; queue<int> q; int a[1000007],sh[1000007],b[1000007]; ll ans; void gao(int x){ while(x!=-1){ b[++b[0]]=a[x]; x=sh[x]; } fod(i,b[0],1)printf("%d",b[i]); } int main(){ scanf("%d",&n); q.push(1); sh[1]=-1; a[1]=1; while(!q.empty()){ now=q.front(); q.pop(); k=now*10%n; l=(now*10+1)%n; if(!k){ gao(now); printf("0\n"); break; } if(!l){ gao(now); printf("1\n"); break; } if(!sh[k]){ q.push(k); sh[k]=now; a[k]=0; } if(!sh[l]){ q.push(l); sh[l]=now; a[l]=1; } } // printf("%lld\n",ans); }
相关文章推荐
- 51nod 1109 —— 01组成的N的倍数
- 51nod 1109 —— 01组成的N的倍数
- 51Nod - 1109 01组成的N的倍数 【bfs+同余定理】
- 51nod 1109 01组成的N的倍数+
- ACM_51nod_1109_01组成的N的倍数
- 51Nod-1109-01组成的N的倍数
- 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的倍数 【dfs+剪枝+vector】
- 51Nod-1109-01组成的N的倍数
- 51NOD 1109 01组成的N的倍数
- 51nod 1109 01组成的N的倍数
- 51nod 1109 01组成的N的倍数
- 51nod-1109 01组成的N的倍数(宽搜)
- 51nod 1109 01组成的N的倍数 (bfs)
- POJ 1426 Find The Multiple && 51nod 1109 01组成的N的倍数 (BFS + 同余模定理)
- 51Nod 1109 01组成的N的倍数