Find The Multiple

Time Limit: 1000ms
Memory Limit: 10000KB
This problem will be judged on PKU. Original ID: 1426
64-bit integer IO format: %lld      Java class name: Main
Special Judge
 
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

 
解题:搜索。题意就是输入一个数,找出它的一个倍数,该值只包含0和1
 
DFS
POJ 1426 Find The Multiple_#includePOJ 1426 Find The Multiple_git_02
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 #include <climits>
 7 #include <vector>
 8 #include <queue>
 9 #include <cstdlib>
10 #include <string>
11 #include <set>
12 #include <stack>
13 #define LL long long
14 #define pii pair<int,int>
15 #define INF 0x3f3f3f3f
16 using namespace std;
17 int n,limit = 20;
18 unsigned LL ans;
19 bool dfs(unsigned LL cur,int step) {
20     if(step == limit) return false;
21     if(cur%n == 0) {
22         ans = cur;
23         return true;
24     }
25     if(dfs(cur*10,step+1)) return true;
26     if(dfs(cur*10+1,step+1)) return true;
27     return false;
28 }
29 int main() {
30     while(scanf("%d",&n),n) {
31         if(dfs(1,0)) printf("%I64u\n",ans);
32     }
33     return 0;
34 }
View Code

 

BFS 貌似要快那么点点

POJ 1426 Find The Multiple_#includePOJ 1426 Find The Multiple_git_02
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 #include <climits>
 7 #include <vector>
 8 #include <queue>
 9 #include <cstdlib>
10 #include <string>
11 #include <set>
12 #include <stack>
13 #define LL long long
14 #define pii pair<int,int>
15 #define INF 0x3f3f3f3f
16 using namespace std;
17 int n,head,tail;
18 unsigned LL q[1000000];
19 unsigned LL bfs() {
20     head = tail = 0;
21     q[tail++] = 1;
22     while(head < tail) {
23         unsigned LL now = q[head++];
24         if(now%n == 0) return now;
25         unsigned LL tmp = now*10;
26         if(tmp%n == 0) return tmp;
27         q[tail++] = tmp;
28         tmp = now*10+1;
29         if(tmp%n == 0) return tmp;
30         q[tail++] = tmp;
31     }
32 }
33 int main() {
34     while(scanf("%d",&n),n) printf("%I64u\n",bfs());
35     return 0;
36 }
View Code

 

夜空中最亮的星,照亮我前行