1. 程式人生 > >POJ 1426 BFS

POJ 1426 BFS

hose lang inpu tor ems size nta auto assume

Find The Multiple
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 35790 Accepted: 14957 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 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

10
100100100100100100
111111111111111111

Source

Dhaka 2002

題意:給定一個數,找到由一個01串使得是它的倍數。

分析:直接bfs每次加0加1,同時每次取模,判斷是不是為0就可以了。

代碼:

 1 ////#include "bits/stdc++.h"
 2 #include "cstdio"
 3 #include "map"
 4 #include "set"
 5 #include "cmath"
 6 #include "queue"
 7 #include "vector"
 8 #include "string"
 9 #include "
cstring" 10 #include "time.h" 11 #include "iostream" 12 #include "stdlib.h" 13 #include "algorithm" 14 #define db double 15 #define ll long long 16 #define vec vector<ll> 17 #define Mt vector<vec> 18 #define ci(x) scanf("%d",&x) 19 #define cd(x) scanf("%lf",&x) 20 #define cl(x) scanf("%lld",&x) 21 #define pi(x) printf("%d\n",x) 22 #define pd(x) printf("%f\n",x) 23 #define pl(x) printf("%lld\n",x) 24 #define rep(i, x, y) for(int i=x;i<=y;i++) 25 const int N = 1e6 + 5; 26 const int mod = 1e9 + 7; 27 const int MOD = mod - 1; 28 const db eps = 1e-18; 29 const db PI = acos(-1.0); 30 using namespace std; 31 int n; 32 struct P 33 { 34 int s[20]; 35 int ans,cnt; 36 }; 37 bool v[205]; 38 //int R() 39 //{ 40 // int x=0,f=1;char ch=getchar(); 41 // while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} 42 // while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} 43 // return x*f; 44 //} 45 inline void bfs(int x) 46 { 47 queue<P> q; 48 P p; 49 memset(p.s,0,sizeof(p.s)); 50 p.s[0]=1; 51 p.cnt=1; 52 p.ans=1; 53 v[p.ans]=1; 54 q.push(p); 55 while(q.size()) 56 { 57 P p1=q.front(); 58 q.pop(); 59 if(!p1.ans){ 60 for(int i=0;i<p1.cnt;i++) 61 printf("%d",p1.s[i]); 62 puts(""); 63 return; 64 } 65 for(int i=0;i<=1;i++){ 66 P p2; 67 for(int ii=0;ii<p1.cnt;ii++) p2.s[ii]=p1.s[ii]; 68 p2.cnt=p1.cnt,p2.ans=p1.ans; 69 p2.ans=(p2.ans*10+i)%x; 70 if(v[p2.ans]==1) continue;//限制隊列中元素的個數,否則會MLE 71 v[p2.ans]=1; 72 p2.s[p2.cnt++]=i; 73 q.push(p2); 74 } 75 } 76 } 77 int main() 78 { 79 while(scanf("%d",&n)==1&&n) 80 { 81 memset(v,0, sizeof(v)); 82 bfs(n); 83 } 84 }

POJ 1426 BFS