Cod sursa(job #2329036)

Utilizator ardutgamerAndrei Bancila ardutgamer Data 26 ianuarie 2019 12:07:09
Problema Multiplu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <cstdio>
#include <bitset>
#include <queue>

using namespace std;

const int NMAX = 2000005;
queue<int>q;
bitset<NMAX> viz,cif;
int ant[NMAX];
int sol[NMAX];

inline int cmmdc(int a,int b)
{
    int r;
    while(b)
    {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}

inline int cmmmc(int a,int b)
{
    return (int)1ll*(a*b)/cmmdc(a,b);
}

int main()
{
    freopen("multiplu.in","r",stdin);
    freopen("multiplu.out","w",stdout);
    int a,b,k=0;
    scanf("%d%d",&a,&b);
    int p = cmmmc(a,b);
    ant[1]=-1;
    cif[1]=1;
    viz[1]=1;
    q.push(1);
    while(!q.empty())
    {
        int temp = q.front();
        q.pop();
        for(int i = 0 ; i <= 1 ; i++)
        {
            int nr = (temp * 10 + i) % p;
            if(!viz[nr])
            {
                cif[nr] = i;
                viz[nr] = 1;
                ant[nr] = temp;
                q.push(nr);
            }
            if(viz[0])
            {
                int num=0;
                while(num != -1)
                {
                    sol[++k] = cif[num];
                    num = ant[num];
                }
                for(int j = k ; j >= 1 ; j--)
                    printf("%d",sol[j]);
                return 0;
            }
        }
    }
    return 0;
}