Find The Multiple
Time Limit: 1000 MS Memory Limit: 10000 K
Total Submissions: 14622 Accepted: 5938 Special Judge
Description
Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. you may assume that n is not greater than 200 and there is a corresponding m containing no more than 100 decimal digits.
Input
The input file may contain in multiple test cases. Each line contains a value of n (1 <=n <= 200). A line containing a zero terminates the input.
Output
For each value of n in the input print a line containing the corresponding value of m. the decimal representation of m must not contain more than 100 digits. if there are multiple solutions for a given value of n, any one of them is acceptable.
Sample Input
2
6
19
0 Sample Output
10100100100100100100111111111111111111
It is to find the multiples. bfs is the wide search. I typed the/* code for the deep search, but it was very slow. It was too easy to go To the RUNTIME!
#include<iostream>#include<stdio.h>#include<stack>#include<string.h>using namespace std;stack<int > q;struct hal{int x,leave,floor,front;}l[300000];int visit[300];int n,re;bool init(int num,int flag){/*l[num].x=flag;if(flag==0){l[num].leave=(l[num>>1].leave*10)%n;if(visit[l[num].leave])return false;visit[l[num].leave]=1;l[num].floor=l[num>>1].floor+1;if(l[num].leave==0){re=num;return true;}if(l[num].floor>200)return false;}else if(flag==1){l[num].leave=(l[num>>1].leave*10+1)%n;if(visit[l[num].leave])return false;visit[l[num].leave]=1;l[num].floor=l[num>>1].floor+1;if(l[num].leave==0){re=num;return true;}if(l[num].floor>200)return false;}else if(flag==-1){l[num].leave=1;l[num].x=-1;l[num].floor=1;}if(init(num<<1,0))return true;if(init(num<<1|1,1))return true;return false;*/int t,w,j; t=w=1;l[t].x=-1;l[t].leave=1;l[t].floor=1;l[t].front=-1;while(t<=w){for(j=0;j<=1;j++){l[++w].floor=l[t].floor+1;l[w].front=t;l[w].x=j;if(j==0)l[w].leave=(l[t].leave*10)%n;elsel[w].leave=(l[t].leave*10+1)%n;if(visit[l[w].leave]){w--;continue;}visit[l[w].leave]=1;if(l[w].leave==0){re=w;return true;}if(l[w].floor>200){continue;}}t++;}return false;}bool bfs(int e){while(l[e].x!=-1){q.push(l[e].x);e=l[e].front;}printf("1");while(!q.empty()){printf("%d",q.top());q.pop();}printf("\n");return true;} int main (){while(scanf("%d",&n)!=EOF&&n){memset(visit,0,sizeof(visit));visit[1]=1;l[1].leave=-1;init(1,-1);//printf("%d",re);bfs(re);}return 0;}