• zoj 1530 Find The Multiple


    Find The Multiple

    Time Limit: 2 Seconds      Memory Limit: 65536 KB      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 (0) 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: Asia 2002, Dhaka (Bengal)

    题意:给你一个数n,让你找n的倍数m,m的十进制中只能有1和0,问最小的m是几。

    思路若没有是n的倍数的条件,如何构造01序列?开一个队列,先把1放进去。然后取出1,把1*10,1*10+1放进去,以此类推是n的倍数只需要判断一下即可,但答案可能爆long logn,所以用同余定理 若a%b=c,那么ax%b=cx%b (x!=0),用字符数组记录01序列,同时记录这个01序列%n的余数。还有一个问题,空间消耗巨大,还是用同余定理:如果a%n=c,b%n=c,a<b,那么这个时候b就不用入队了,因为答案只看余数

    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    struct nond{
        string s;
        int mod;
    }cur,net;
    int n;
    bool vis[1000001];
    int main(){
        while(1){
            queue<nond>que;
            memset(vis,0,sizeof(vis));
            scanf("%d",&n);
            if(n==0)    break;
            cur.s="1";cur.mod=1;
            que.push(cur);
            while(!que.empty()){
                cur=que.front();
                que.pop();
                net.mod=(cur.mod*10)%n;
                net.s=cur.s+'0';
                if(net.mod==0){
                    cout<<net.s<<endl;
                    break;
                }
                if(!vis[net.mod]){
                    que.push(net);
                    vis[net.mod]=1;
                }
                net.mod=(cur.mod*10+1)%n;
                net.s=cur.s+'1';
                if(net.mod==0){
                    cout<<net.s<<endl;
                    break;
                }
                if(!vis[net.mod]){
                    que.push(net);
                    vis[net.mod]=1;
                }
            }
        }
        
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    POJ 3041 Asteroids 二分图匹配
    ZOJ 3705 Applications 模拟
    UNIX环境高级编程(第3版)
    明清美文四卷本(共四册)
    卑鄙的圣人:曹操(全10册)
    爱丽丝梦游仙境
    我在大清官场30年
    乌合之众:大众心理研究
    Java多线程编程实战指南
    Linux就该这么学
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7502231.html
Copyright © 2020-2023  润新知