Cod sursa(job #1327432)

Utilizator lacraruraduRadu Matei Lacraru lacraruradu Data 26 ianuarie 2015 18:42:33
Problema Multiplu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
#include <queue>

using namespace std;

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

const int P = 2000001;

int a, b, m;
int c[P], v[P];
queue<int> q;

int cmmdc(int nr1, int nr2)
{
    int r = nr1 % nr2;

    while(r != 0)
    {
        nr1 = nr2;
        nr2 = r;
        r = nr1 % nr2;
    }

    return nr2;
}

void citire()
{
    in >> a >> b;
}

int main()
{
    citire();

    m = a * b / cmmdc(a, b);

    for(int i = 0; i < P; i++)
        c[i] = -1;

    q.push(1);
    c[1] = 1;
    bool ok = 1;
    while(!q.empty() && ok == 1)
    {
        int x = q.front();
        q.pop();

        for(int i = 0; i <= 1; i++)
        {
            int y = x * 10 + i;
            y %= m;

            if(c[y] == -1)
            {
                c[y] = i;
                v[y] = x;
                q.push(y);
                if(y == 0)
                    ok = 0;
            }
        }
    }

    int nr = 0, rez = 0;

    while(1)
    {
        rez *= 10;
        rez += c[nr];
        nr = v[nr];

        if(nr == 1)
        {
            rez *= 10;
            rez += c[nr];
            break;
        }
    }

    out << rez << '\n';
    return 0;
}