Cod sursa(job #2943874)

Utilizator adelina_15InfoAdelina Radoi adelina_15Info Data 21 noiembrie 2022 18:53:54
Problema Multiplu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

queue<int>q;

int pred[2000005];
bool viz[2000005];

vector<bool>sol;

int cmmmc(int a, int b)
{
    int p = a*b;
    while(b > 0)
    {
        int r = a % b;
        a = b;
        b = r;
    }
    return p/a;
}

void Reconstituire(int x, int mc)
{
    if(x == 1)
    {
        fout << 1;
        return;
    }
    int ant = pred[x];
    Reconstituire(ant, mc);
    if((ant*10) % mc == x)
        fout << 0;
    else
        fout << 1;
}

int main()
{
    int a, b;
    fin >> a >> b;
    int mc = cmmmc(a, b);
    if(mc == 1)
    {
        fout << 1;
        return 0;
    }
    q.push(1%mc);
    int rasp = 0;
    while(!q.empty())
    {
        int restAnt = q.front();
        q.pop();
        int r0 = (restAnt*10) % mc;
        int r1 = (restAnt*10+1) % mc;
        if(viz[r0] == 0)
        {
            pred[r0] = restAnt;
            viz[r0] = 1;
            q.push(r0);
        }
        if(viz[r1] == 0)
        {
            pred[r1] = restAnt;
            viz[r1] = 1;
            q.push(r1);
        }
        if(r0 == 0)
            break;
        if(r1 == 0)
            break;
    }
    Reconstituire(0, mc);
    return 0;
}