您的位置:首页 > 其它

【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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: