Find The Multiple
Time Limit: 1000MS | Memory Limit: 10000K | |||
Total Submissions: 37083 | Accepted: 15507 | 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 100100100100100100111111111111111111
做kuangbin系列的时候遇到的搜索题。
题意是找出一个01构成的十进制数使其能整除给定的数
如果不是分类在搜索里根本想不到是搜索好嘛
搜题解的时候搜到很多数论啊同余啊不管数学不会啊orz
先用dfs试了一下发现由于dfs是向一个方向死命的搜(即10000000...0这样搜)容易越界+超时
(补充:dfs其实也能过,就是要用unsigned long long 反正就不是不太好啦
所以该用bfs进行搜索,两个入口进行双向搜索,这样效率大大提升。
这样过了以后,又试了一下打表。
0ms无压力。
//#include <bits/stdc++.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <queue> #include <stack> #include <algorithm> using namespace std; const int maxn = 1e6; const int N = 20; bool used[N][N]; int perm[maxn]; int maze[N][N]; long long n,k,cnt = 0; long long ans = 0; int l,r,C; typedef pair<int,int> P; int dx[] = {-1,1,0,0,0,0}; int dy[] = {0,0,1,-1,0,0}; int dz[] = {0,0,0,0,-1,1}; P father[10][10]; int flag = 0; typedef long long ll; ll bfs(ll n) { queue<ll> Q; Q.push(1); while(1) { ll t = Q.front(); Q.pop(); if(t % n == 0)return t; Q.push(t * 10); Q.push(t * 10 + 1); } } int main() { std::ios::sync_with_stdio(false); while(cin>>n && n) { cout<<bfs(n)<<endl; } return 0; }
打表:
ll Ans[]={1, 10, 111, 100, 10, 1110, 1001, 1000, 111111111, 10, 11, 11100, 1001, 10010, 1110, 10000, 11101, 1111111110, 11001, 100, 10101, 110, 110101, 111000, 100, 10010, 1101111111, 100100, 1101101, 1110, 111011, 100000, 111111, 111010, 10010, 11111111100, 111, 110010, 10101, 1000, 11111, 101010, 1101101, 1100, 1111111110, 1101010, 10011, 1110000, 1100001, 100, 100011, 100100, 100011, 11011111110, 110, 1001000, 11001, 11011010, 11011111, 11100, 100101, 1110110, 1111011111, 1000000, 10010, 1111110, 1101011, 1110100, 10000101, 10010, 10011, 111111111000, 10001, 1110, 11100, 1100100, 1001, 101010, 10010011, 10000, 1111111101, 111110, 101011, 1010100, 111010, 11011010, 11010111, 11000, 11010101, 1111111110, 1001, 11010100, 10000011, 100110, 110010, 11100000, 11100001, 11000010, 111111111111111111, 100, 101, 1000110, 11100001, 1001000, 101010, 1000110, 100010011, 110111111100, 1001010111, 110, 111, 10010000, 1011011, 110010, 1101010, 110110100, 10101111111, 110111110, 100111011, 111000, 11011, 1001010, 10001100111, 11101100, 1000, 11110111110, 11010011, 10000000, 100100001, 10010, 101001, 11111100, 11101111, 11010110, 11011111110, 11101000, 10001, 100001010, 110110101, 100100, 10011, 100110, 1001, 1111111110000, 11011010, 100010, 1100001, 11100, 110111, 11100, 1110001, 11001000, 10111110111, 10010, 1110110, 1010100, 10101101011, 100100110, 100011, 100000, 11101111, 11111111010, 1010111, 1111100, 1111110, 1010110, 11111011, 10101000, 10111101, 111010, 1111011111, 110110100, 1011001101, 110101110, 100100, 110000, 100101111, 110101010, 11010111, 11111111100, 1001111, 10010, 100101, 110101000, 1110, 100000110, 1001011, 1001100, 1010111010111, 110010, 11101111, 111000000, 11001, 111000010, 101010, 110000100, 1101000101, 1111111111111111110, 111000011, 1000};