Cod sursa(job #2263154)

Utilizator TavinciStefanescu Octavian Tavinci Data 18 octombrie 2018 12:03:17
Problema Multiplu Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb

#include <bits/stdc++.h>
#define NMAX 2000002
using namespace std;

ifstream fin("multiplu.in");
ofstream fout("multiplu.out");

int pre[NMAX], up[NMAX];
bool verif[NMAX];

void afis(int g)
{
    if(g!=-1)
    {
        afis(pre[g]);
        fout<<up[g];
    }
}


int main()
{
    int a,b,m;
    fin>>a>>b;
    if( a * b == 1 )
    {
        fout << "1";
    }
    else
    {
        queue<int> Q;
        m = a / __gcd(a,b) * b;
        Q.push(1);
        verif[1] = 1;
        up[1] = 1;
        pre[1] = -1;
        int gasit = 0;
        while( !Q.empty() && gasit==0)
        {
            int nod = Q.front();
            Q.pop();

            int x;
            x=(10*nod)%m;
            if(verif[x]==0)
            {
                    verif[x] = 1;
                    pre[x] = nod;
                    up[x] = 0;
                    Q.push(x);
            }
            x=(10*nod+1)%m;
            if(verif[x]==0)
            {
                    verif[x] = 1;
                    pre[x] = nod;
                    up[x] = 1;
                    Q.push(x);
            }

        }
        /*while( !Q.empty() && !gasit ) {  /// meh
        int nod = Q.front();
        Q.pop();
        for( int i : {0, 1} ) {
            int x = (10 * nod + i) % m;
            if( verif[x] ) continue;
            verif[x] = 1;
            pre[x] = nod;
            up[x] = i;
            Q.push(x);
        }
    }*/
        afis(gasit);
    }
    return 0;
}