Cod sursa(job #1101509)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 8 februarie 2014 16:27:40
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>
#include <vector>
#include <queue>

#define NMAX 2000007

using namespace std;

queue< int > Sol;
int Prev[NMAX];
bool Cif[NMAX], Ap[NMAX], V[NMAX];
inline int gcd(int a, int b){
    if(! b)
        return a;
    return gcd(b, a % b);
}

int main(){
    int a = 0, b = 0, m = 0;
    freopen("multiplu.in", "r", stdin);
    freopen("multiplu.out", "w", stdout);
    scanf("%d %d", &a, &b);
    m = a * b / gcd(a, b);
    int Aux = 1 % m;
    Sol.push(Aux);
    Prev[Aux] = 1;
    Cif[Aux] = 1;
    while(! Sol.empty()){
        Aux = Sol.front();
        Sol.pop();
        int NewAux;
        for(int i = 0; i <= 1; ++i){
            NewAux = (Aux * 10 + i) % m;
            if(Ap[NewAux] == 0){
                Ap[NewAux] = 1;
                Prev[NewAux] = Aux;
                Cif[NewAux] = i;
                Sol.push(NewAux);
            }
        }
    }
    int c = 0, NR = 0;
    while(c != 1){
        V[++NR] = Cif[c];
        c = Prev[c];
    }
    if(m != 1)
        V[++NR] = 1;
    for(int i = NR; i >= 1; --i)
        printf("%d", V[i]);
    printf("\n");
    return 0;
}