Cod sursa(job #868755)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 31 ianuarie 2013 16:38:02
Problema Multiplu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <string>
#define mp make_pair
#define DN 2000100
using namespace std;

queue< int > q;
int prec[DN];
bool valoare[DN],viz[DN];
vector<int> x;

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

int main()
{
    int a,b,cmmmc,pozitie=0;
    ifstream f("multiplu.in");
    ofstream g("multiplu.out");
    f>>a>>b;

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

    q.push(1);

    valoare[1]=1;
    prec[1]=-1;
   // prec[0]=-1;

    while(q.size())
    {
        int val=q.front();
        q.pop();

        if(val==0)
            break;

        if(!viz[(val*10)%cmmmc])
        {
            int noul_rest= (val*10)%cmmmc;

            valoare[noul_rest]=0;
            prec[noul_rest]= val;

            q.push( noul_rest );
            viz[ noul_rest ]=true;
        }

        if(!viz[(val*10+1)%cmmmc])
        {
            int noul_rest= (val*10+1)%cmmmc;

            valoare[noul_rest]=1;
            prec[noul_rest]=val;

            q.push( noul_rest );
            viz[ noul_rest ]=true;
        }
    }
    while(prec[pozitie]!=-1)
    {
        x.push_back( valoare[pozitie] );
        pozitie=prec[pozitie];
    }
    g<<1;
    for(int i=x.size()-1;i>=0;--i)
        g<<x[i];

    return 0;
}