Cod sursa(job #3186523)

Utilizator TomMMMMatei Toma TomMMM Data 23 decembrie 2023 16:42:47
Problema Multiplu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <queue>

using namespace std;

ofstream fout("multiplu.out");
const int Nmax = 2000005;
int A, B, n;

queue<int> Q;
int prv[Nmax];
bool visited[Nmax];

int CMMDC(int a, int b) {
    int r = a % b;
    while(r) {
        a = b;
        b = r;
        r = a % b;
    }
    return b;
}

void reconst(int rest) {
    if(rest == 1) {
        fout << 1;
        return;
    }
    reconst(prv[rest]);
    if((prv[rest] * 10) % n == rest) {
        fout << 0;
    }
    else {
        fout << 1;
    }
}

int main() {
    ifstream fin("multiplu.in");
    fin >> A >> B;
    n = A * B / CMMDC(A, B);
    if(n == 1) {
        fout << "1\n";
        return 0;
    }
    Q.push(1);
    visited[1] = true;
    while(!Q.empty()) {
        int rest = Q.front();
        Q.pop();
        int next_rest = (rest * 10) % n;
        if(!visited[next_rest]) {
            Q.push(next_rest);
            visited[next_rest] = true;
            prv[next_rest] = rest;
        }
        if(next_rest == 0) {
            break;
        }

        next_rest = (rest * 10 + 1) % n;
        if(!visited[next_rest]) {
            Q.push(next_rest);
            visited[next_rest] = true;
            prv[next_rest] = rest;
        }
        if(next_rest == 0) {
            break;
        }
    }
    reconst(0);
    return 0;
}