Cod sursa(job #2587704)

Utilizator ANNOnymousMihaila Stefan-Alexandru ANNOnymous Data 23 martie 2020 14:17:16
Problema Multiplu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.6 kb
/*#include<fstream>

using namespace std;

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

struct nod{
    int info;
    nod *urm;
};

nod *vf=NULL;

void Adaugare(nod *&prim, int x)
{
    nod *q=new nod;
    q->info=x;
    q->urm=NULL;
    if(prim==NULL){
        prim=q;
    }
    else{
        nod *t=prim;
        while(t->urm!=NULL){
            t=t->urm;
        }
        t->urm=q;
    }
}

void Stergere(nod *&prim)
{
    nod *t=prim;
    prim=prim->urm;
    delete t;
}

int v[2000002],n;
int cmmdc(int x,int y)
{
    int r=x%y;
    while(r!=0)
    {
        x=y;
        y=r;
        r=x%y;
    }
    return y;
}

void sol(int x)
{
    if(x!=-1)
    {
        sol(v[x]);
        if((v[x]*10)%n==x)
            g<<0;
        else
            g<<1;
    }
}

int main()
{
    int a,b,x,xx;
    f>>a>>b;
    n=a*b/cmmdc(a,b);
    if(n==1)
        g<<1;
    else
    {
        Adaugare(vf,1);
        v[1]=-1;
        while(1)
        {
            xx=vf->info;
            Stergere(vf);
            x=xx*10;
            x%=n;
            if(v[x]==0)
            {
                v[x]=xx;
                if(x==0)
                    break;
                Adaugare(vf,x);
            }
            x=xx*10+1;
            x%=n;
            if(v[x]==0)
            {
                v[x]=xx;
                if(x==0)
                    break;
                Adaugare(vf,x);
            }
        }
    }
    sol(0);
}
*/
#include<fstream>
#include<queue>

using namespace std;

ifstream f("multiplu.in");
ofstream g("multiplu.out");
queue<int> q;
int v[2000002],n;
int cmmdc(int x,int y)
{
    int r=x%y;
    while(r!=0)
    {
        x=y;
        y=r;
        r=x%y;
    }
    return y;
}

void sol(int x)
{
    if(x!=-1)
    {
        sol(v[x]);
        if((v[x]*10)%n==x)
            g<<0;
        else
            g<<1;
    }
}

int main()
{
    int a,b,x,xx;
    f>>a>>b;
    n=a*b/cmmdc(a,b);
    if(n==1)
        g<<1;
    else
    {
        q.push(1);
        v[1]=-1;
        while(1)
        {
            xx=q.front();
            q.pop();
            x=xx*10;
            x%=n;
            if(v[x]==0)
            {
                v[x]=xx;
                if(x==0)
                    break;
                q.push(x);
            }
            x=xx*10+1;
            x%=n;
            if(v[x]==0)
            {
                v[x]=xx;
                if(x==0)
                    break;
                q.push(x);
            }
        }
    }
    sol(0);
}