Cod sursa(job #2265703)

Utilizator BungerNadejde George Bunger Data 21 octombrie 2018 16:08:38
Problema Multiplu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <bits/stdc++.h>

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

    return a;
}
void afisare(int i)
{
    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;
            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;
            }
            q.push(nr*10+0);
            q.push(nr*10+1);
        }
    }
    return 0;
}