Cod sursa(job #2299193)

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

using namespace std;

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

int a, b, m, x, k, i, p, nr, cnt, ok;
int cif[DIM], ant[DIM];

queue <int> q;
bitset <DIM> v;
string sol;

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

int main(){
    fin >> a >> b;
    if (a*b == 1){
        fout << 1;
        return 0;
    }
    m = a/cmmdc(a, b)*b; /// m = cmmmc (a, b)
    q.push(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)
    v[1] = 1; /// viz
    cif[1] = 1; /// tip
    ant[1] = -1; /// anterior
    while (!q.empty() && !ok){
        k = q.front();
        q.pop();
        for (i=0; i<=1; i++){
            p = (10*k + i)%m;
            if (!v[p]){
                v[p] = 1;
                ant[p] = k;
                cif[p] = i;
                q.push(p);
            }
        }
    }
    while(ok != -1) {
        sol.push_back (cif[ok] + '0');
        ok = ant[ok];
    }
    reverse(sol.begin(), sol.end());
    fout << sol;
    return 0;
}