Cod sursa(job #2265691)

Utilizator BungerNadejde George Bunger Data 21 octombrie 2018 15:59:53
Problema Multiplu Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin  ("multiplu.in");
ofstream fout ("multiplu.out");
const int NMAX= 1e6+5;
queue <int> q;
int A,B,nodPrec[NMAX],cur[NMAX];
bool last,b[NMAX];
long long M,mod1,mod2,nr;
long long cmmdc (long long a,long long b)
{
    int r;
    while(b)
    {
        r=a%b;
        a=b;
        b=r;
    }

    return a;
}
void afisare(int i)
{
    //fout<<i<<endl;
    if(i==-1)
    {
        fout<<1;
        return;
    }
    afisare(nodPrec[i]);
    fout<<cur[i];
}
int main()
{
    fin>>A>>B;
    M=(A*B)/cmmdc(A,B);
    nodPrec[0]=-1;
    cur[0]=1;
    q.push(1);
    if(A*B==1)
        fout<<1;
    else
    {
        while(!q.empty() )
        {
            nr=q.front();
            mod1=(nr*10+0)%M;
            mod2=(nr*10+1)%M;
           // fout<<mod1<<" "<<mod2<<endl;
            q.pop();
            if(mod1==0)
            {
                last=0;
                afisare(nr%M);
                break;
            }
            if(mod2==0)
            {
                last=1;
                afisare(nr%M);
                break;
            }
            if(!b[mod1])
            {
                b[mod1]=true;
                cur[mod1]=0;
                if(nr==1)
                    nodPrec[mod1]=-1;
                else
                    nodPrec[mod1]=nr%M;
            }
            if(!b[mod2])
            {
                b[mod2]=true;
                cur[mod2]=1;
                if(nr==1)
                    nodPrec[mod2]=-1;
                else
                    nodPrec[mod2]=nr%M;
            }
           // fout<<"prec mod1= "<<nodPrec[mod1]<<"cur mod1= "<<cur[mod1]<<endl;
           // fout<<"prec mod2= "<<nodPrec[mod2]<<"cur mod2= "<<cur[mod2]<<endl<<endl;

            q.push(nr*10+0);
            q.push(nr*10+1);

        }
    }
   // fout<<endl;
    //for(int i=1;i<=15;i++)
      //  fout<<nodPrec[i]<<" ";
        //fout<<endl;
    fout<<last;

    return 0;
}