POJ 1426 Find The Multiple(BFS + 同余模定理)

Find The Multiple

Time Limit:1000MSMemory Limit:10000K

Total Submissions:21436Accepted:8775Special 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

26190

Sample Output

10100100100100100100111111111111111111

Source

题意:输入一个正整数n(1<=n<=200),然后要求找一个只包含0和1的十进制数字能整除n

#include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>using namespace std;int n;int ans;int v[5000];struct node{int x;int y;} a[1000010];void DFS(int k){int pt = a[k].y;if(pt <= 0){printf("1");return ;}DFS(pt);printf("%d",a[pt].x);}void BFS(){ans = 1;memset(v,0,sizeof(v));queue<node>q;struct node t,f;t.x = 1;t.y = 0;a[0].x = 1;a[0].y = 0;q.push(t);while(!q.empty()){t = q.front();q.pop();for(int i=0; i<=1; i++){f.x = t.x * 10 + i; /// 同余模定理应用if(v[f.x] == 0){f.x = f.x % n;f.y = ans;q.push(f);v[f.x] = 1;a[ans].x = i;a[ans].y = t.y;if(f.x == 0){DFS(ans);printf("%d\n",i);return ;}ans++;}}}}int main(){while(scanf("%d",&n)!=EOF){if(n == 0){break;}BFS();}return 0;}

版权声明:本文为博主原创文章,如有特殊需要请与博主联系 QQ : 793977586。

,我喜欢出发。凡是到达了的地方,

POJ 1426 Find The Multiple(BFS + 同余模定理)

相关文章:

你感兴趣的文章:

标签云: