Cod sursa(job #1327447)

Utilizator dragos_musanMusan Dragos dragos_musan Data 26 ianuarie 2015 18:56:42
Problema Multiplu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <queue>
#include <vector>
using namespace std;

const int NMAX = 2000000;

queue <int> q;
int c[NMAX], pred[NMAX];
vector <int> sol;

int cmmdc (int a, int b)
{
    int r;

    r = a%b;

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

int main()
{
    ifstream f("multiplu.in");
    ofstream g("multiplu.out");

    int a,b,r,cmmmc, aux, p1, p0;

    f>>a>>b;

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

    q.push(1);
    c[1] = 1;
    pred[1] = 0;

    while(!q.empty())
    {
        aux = q.front();
        q.pop();

        p0 = (aux * 10) % cmmmc;
        p1 = (aux * 10 + 1) % cmmmc;

        if(pred[p0] == 0)
        {
            q.push(p0);
            c[p0] = 0;
            pred[p0] = aux;
        }
        if(pred[p1] == 0)
        {
            q.push(p1);
            c[p1] = 1;
            pred[p1] = aux;
        }

        if(p1 == 0 || p0 == 0)
            break;
    }

    int i = 0;
    sol.push_back(c[i]);
    while(pred[i] != 0)
    {
        i = pred[i];
        sol.push_back(c[i]);
    }

    int p = 0;
    while(!sol.empty())
    {
        p = p*10 + sol.back();
        sol.pop_back();
    }
    g<<p<<'\n';

    return 0;
}