POJ 1426 Find The Multiple ——————DFS

雨点打透心脏的1/2处 2022-05-13 05:34 265阅读 0赞

Find The Multiple

Language:Default

Find The Multiple
















Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 42225 Accepted: 17735 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

  1. 2
  2. 6
  3. 19
  4. 0

Sample Output

  1. 10
  2. 100100100100100100
  3. 111111111111111111

Source

Dhaka 2002

—– 这道题让找 n 的 01 十进制倍数, 也就是说,找出一个01序列,它是 n 的倍数 第一位只能是1 所以就从 1 开始DFS 下一位只能是0或者1 所以说复杂度是 O(2n) O ( 2 n ) 的级别,有点儿不敢写,但是后来发现这个最大也就是 218 2 18 ,能过得 —

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. typedef long long ll;
  6. ll n,k,flag;
  7. void dfs(ll t,ll i)
  8. {
  9. if(i==19) return ;
  10. if(flag) return ;
  11. if(t%n==0)
  12. {
  13. flag=1;
  14. printf("%lld\n",t);
  15. return ;
  16. }
  17. dfs(t*10,i+1);
  18. dfs(t*10+1,i+1);
  19. }
  20. int main()
  21. {
  22. while(~scanf("%lld",&n)&&n)
  23. {
  24. flag=0;
  25. dfs(1,0);
  26. }
  27. return 0;
  28. }

发表评论

表情:
评论列表 (有 0 条评论,265人围观)

还没有评论,来说两句吧...

相关阅读