POJ 1426 Find The Multiple(同余模定理优化双入口BFS)

Find The Multiple

Time Limit:1000MSMemory Limit:10000K

Total Submissions:19219Accepted:7790Special 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

题意:

找n的倍数,,并且全由01组成

题解:

很容易想到bfs,第1位必须是1,后面的可以是0,也可以是1.

bfs代码:

#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <queue>using namespace std;int n;queue<long long> q;void BFS(){while(!q.empty())q.pop();long long k=1;if(n==1){printf("1\n");return;}q.push(k);while(!q.empty()){k=q.front();q.pop();if(k*10%n){q.push(k*10);}else{printf("%I64d\n",k*10);return;}if((k*10+1)%n){q.push(k*10+1);}else{printf("%I64d\n",k*10+1);return;}}}int main(){while(~scanf("%d",&n)&&n){BFS();}}

在网上有看到用同余数定理来优化处理大数问题的,就研究了下。

同余数定理

(a*b)%n = (a%n *b%n)%n

(a+b)%n = (a%n +b%n)%n

于是

(k*10+1)%n==((k%n)*10+1)%n

(k*10)%n==(k%n)*10%n

这样就可以避免大数问题了,但是,用了同余定理后怎么把原来的数复原,这时候就要借助数组了,由于是双入口,可以借助满二叉树的性质,mod[i]=(mod[i/2]*10+i%2)%n。最后再把i转化为二进制就是路径也就是答案了。

代码:

#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn=800000+100;int mod[maxn];int main(){int n;while(~scanf("%d",&n)&&n){mod[0]=0;mod[1]=1%n;int i=1;while(mod[i]){i++;mod[i]=(mod[i/2]*10+i%2)%n;//模拟了BFS的双入口搜索}int cur=0;while(i){mod[cur++]=i%2;i=i>>1;}for(int i=cur-1;i>=0;i–)//逆序输出printf("%d",mod[i]);printf("\n");}return 0;}

回避现实的人,未来将更不理想。

POJ 1426 Find The Multiple(同余模定理优化双入口BFS)

相关文章:

你感兴趣的文章:

标签云: