Cod sursa(job #2815816)

Utilizator toma_ariciuAriciu Toma toma_ariciu Data 10 decembrie 2021 14:17:06
Problema Multiplu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

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

const int maxN = 2000001;
int n1, n2, mp, f[maxN], p[maxN];

int euclid(int a, int b)
{
    if(a == 0 || b == 0)
        return a + b;
    if(a < b)
        return euclid(a, b % a);
    return euclid(a % b, b);
}

void solve()
{
    queue <int> q;
    p[1] = -1;
    f[1] = 1;
    q.push(1);
    while(!q.empty())
    {
        int curr = q.front(), vecin;
        q.pop();
        for(int i = 0; i < 2; i++)
        {
            vecin = (curr * 10 + i) % mp;
            if(p[vecin] == 0)
            {
                p[vecin] = curr;
                f[vecin] = i;
                if(vecin == 0)
                    return;
                q.push(vecin);
            }
        }
    }
}

void afis(int x)
{
    if(x == -1)
        return;
    afis(p[x]);
    fout << f[x];
}

int main()
{
    fin >> n1 >> n2;
    mp = n1 * n2 / euclid(n1, n2);
    solve();
    afis(0);
    return 0;
}