Cod sursa(job #1459321)

Utilizator PruteanuTheoPruteanu Theodor PruteanuTheo Data 9 iulie 2015 16:32:10
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <cstdio>

using namespace std;

const int NMAX=2000000;

struct queue
{
    bool c;
    int r;
    int pred;
};

queue q[NMAX];
bool f[NMAX];
bool sol[NMAX+1];

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

int main()
{
    freopen("multiplu.in","r",stdin);
    freopen("multiplu.out","w",stdout);
    int a,b,m,p,u,r1,r2,i,j;
    scanf("%d%d",&a,&b);
    if(a*b==1)
    {
        printf("1");
        return 0;
    }
    m=a*b/cmmdc(a,b);
    p=u=1;
    q[1].c=1;
    q[1].pred=0;
    q[1].r=1;
    f[1]=1;
    while(p<=u)
    {
        r1=(q[p].r*10)%m;
        if(f[r1]==0)
            {
                f[r1]=1;
                ++u;
                q[u].r=r1;
                q[u].c=0;
                q[u].pred=p;
                if(r1==0)
                    break;
            }
        r2=(q[p].r*10+1)%m;
        if(f[r2]==0)
            {
                f[r2]=1;
                ++u;
                q[u].r=r2;
                q[u].c=1;
                q[u].pred=p;
                if(r2==0)
                    break;
            }
    ++p;
    }//while
    i=0;
    do
    {
        ++i;
        sol[i]=q[u].c;
        u=q[u].pred;
    }while(u!=0);
    for(j=i;j>=1;--j)
        printf("%d",sol[j]);
    return 0;
}