Cod sursa(job #2299206)

Utilizator radugheoRadu Mihai Gheorghe radugheo Data 9 decembrie 2018 01:02:27
Problema Multiplu Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
#define DIM 2000005

using namespace std;

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

int cif[DIM], ant[DIM], q[DIM];

bool v[DIM];

string sol;

int main(){
    int a, b, m, ok = 0, i, p, u;
    fin >> a >> b;
    if (a*b == 1){
        fout << 1;
        return 0;
    }
    m = a/__gcd(a,b)*b; /// m = cmmmc (a, b)
    v[1] = 1; /// viz
    cif[1] = 1; /// tip
    ant[1] = -1; /// anterior
    q[1] = 1; /// in q am cele mai mici numere formate cu 0 si 1 care dau un anumit rest la impartirea cu m (introduc, de fapt, resturile lor la m - in numar de maxim m-1)
    p = u = 1;
    while (p <= u){
        int k = q[p];
        for (i=0; i<=1; i++){
            int p = (10*k + i)%m;
            if (v[p]){
                continue;
            }
            v[p] = 1;
            ant[p] = k;
            cif[p] = i;
            q[++u] = p;
            if (p == 0){
                break;
            }
        }
        p++;
    }
    while(ok != -1) {
        sol.push_back (cif[ok] + '0');
        ok = ant[ok];
    }
    reverse(sol.begin(), sol.end());
    fout << sol;
    return 0;
}