Cod sursa(job #1459323)

Utilizator aokirisakiLisca Ana aokirisaki Data 9 iulie 2015 16:34:01
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>

using namespace std;

const int NMAX=2000000;

bool f[NMAX];
struct queue{bool c;
             int r,pred;};

queue q[NMAX];
bool sol[NMAX];

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

    return a;
}

ifstream fin("multiplu.in");
ofstream fout("multiplu.out");

int main()
{
    int A,B,M,p,u,r0,r1,i;
    fin>>A>>B;
    M=A*B/cmmdc(A,B);
    p=u=1;
    q[u].c=1;
    q[u].r=1;
    q[u].pred=0;
    f[1]=1;

    if(A*B==1)
    fout<<1<<"\n";

    else{
        while(p<=u)
        {
            r0=(q[p].r*10+0)%M;
            if(f[r0]==0)
            {
                f[r0]=1;
                u++;
                q[u].c=0;
                q[u].r=r0;
                q[u].pred=p;

                if(r0==0)
                    break;
            }

            r1=(q[p].r*10+1)%M;
            if(f[r1]==0)
            {
                f[r1]=1;
                u++;
                q[u].c=1;
                q[u].r=r1;
                q[u].pred=p;
                if(r1==0)
                    break;
            }

            p++;
        }
    }

    i=1;
    while(q[u].pred!=0)
    {sol[i]=q[u].c;
    u=q[u].pred;
    i++;
    }
    sol[i]=1;
    for(i;i>=1;i--)
        fout<<sol[i];
    return 0;
}