Cod sursa(job #3163714)

Utilizator Allie28Radu Alesia Allie28 Data 31 octombrie 2023 23:04:43
Problema Multiplu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <vector>
#include <queue>
#include <fstream>
#include <iostream>

using namespace std;

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

const int LMAX = 2000005;
int a[LMAX][2], father[LMAX], cmmdc;
bool ap[LMAX], ultcif[LMAX];

void gasescnr() {
    queue <int> Q;
    Q.push(1);
    while (!Q.empty() && !ap[0]) {
        int node = Q.front();
        Q.pop();
        ap[node] = true;
        if (!ap[node*10%cmmdc]) {
            a[node][0] = node*10%cmmdc;
            Q.push(node*10%cmmdc);
        }
        else {
            a[node][0] = -1;
        }
        if (!ap[(node*10+1)%cmmdc]) {
            a[node][1] = (node*10+1)%cmmdc;
            Q.push((node*10+1)%cmmdc);
        }
        else {
            a[node][1] = -1;
        }

    }
}

void bfs() {
    queue <int> Q;
    father[1] = -1;
    ultcif[1] = 1;
    Q.push(1);
    bool ok;
    while (!ok) {
        int node = Q.front();
        Q.pop();
        for (int i = 0; i < 2; i++) {
            if (a[node][i] != -1) {
                ultcif[a[node][i]] = i;
                father[a[node][i]] = node;
                Q.push(a[node][i]);
                if (a[node][i] == 0) {
                    ok = 1;
                }
            }
        }

    }
}
void afisnr(int node) {
    if (father[node] != -1) {
        afisnr(father[node]);
    }
    fout<<ultcif[node];
}


int main() {
    int A, B, p, r;
    fin>>A>>B;
    p = A*B;
    while (r) {
        r = A%B;
        A = B;
        B = r;
    }
    cmmdc = p/A;
    gasescnr();
    bfs();
    afisnr(0);



    fin.close();
    fout.close();
    return 0;
}