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
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 }
BFS 貌似要快那么点点
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 }