Cod sursa(job #2263123)

Utilizator TavinciStefanescu Octavian Tavinci Data 18 octombrie 2018 11:16:45
Problema Multiplu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb

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

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

int pre[NMAX], tip[NMAX],used[NMAX];
string sol;

int main()
{
    int a,b,m;
    fin>>a>>b;
    if( a * b == 1 )
    {
        fout << "1";
    }
    else
    {
        m = a / __gcd(a,b) * b;
        queue<int> Q;
        Q.push(1);
        used[1] = 1;
        tip[1] = 1;
        pre[1] = -1;
        int gasit = 0;
        while( !Q.empty() && !gasit )
        {
            int nod = Q.front();
            Q.pop();
            for(int cif=0; cif<=1; cif++)
            {
                int x = (10 * nod + cif) % m;
                if( !used[x] )
                {
                    used[x] = 1;
                    pre[x] = nod;
                    tip[x] = cif;
                    Q.push(x);
                }
            }
        }
        while( gasit!=-1)
        {
            sol.push_back('0' + tip[gasit]);
            gasit = pre[gasit];
        }
        fout << sol << '\n';
    }
    return 0;
}