【51Nod 1109】01组成的N的倍数

来源:互联网 发布:教父刀数据 编辑:程序博客网 时间:2024/06/05 20:14

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);}
2 0
原创粉丝点击