Cod sursa(job #1828028)

Utilizator alexradu04Radu Alexandru alexradu04 Data 12 decembrie 2016 18:24:39
Problema Multiplu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <cstdio>
using namespace std;
const int NMAX=2000005;
int rez[NMAX];
bool exista[NMAX];
int cmmdc(int a,int b)
{
    int r;
    while(b)
    {
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}
struct my_queue
{
    bool c;
    int r,t;
};
my_queue q[NMAX];
bool viz[NMAX],sol[NMAX];
int main ()
{
    freopen("multiplu.in","r",stdin);
    freopen("multiplu.out","w",stdout);
    int A,M,B,p,u,nrm=0,r,i;
    scanf("%d%d",&A,&B);
    M=A/cmmdc(A,B)*B;
    p=u=1;
    my_queue temp;
    temp.c=1;
    temp.r=1;
    temp.t=0;
    q[u]=temp;
    viz[1]=1;
    while(p<=u)
    {
        temp=q[p];
        r=(temp.r*10)%M;
        if(!viz[r])
        {
            viz[r]=1;
            ++u;
            q[u].c=0;q[u].r=r;
            q[u].t=p;
            if(r==0)
                break;
        }
        r=(temp.r*10+1)%M;
        if(!viz[r])
        {
            viz[r]=1;
            ++u;
            q[u].c=1;q[u].r=r;
            q[u].t=p;
            if(r==0)
                break;
        }
        ++p;
    }
    do
    {
        rez[++nrm]=q[u].c;
        u=q[u].t;
    }while(q[u].t);
    rez[++nrm]=q[u].c;
    u=q[u].t;
    for(i=1;i<=nrm;++i)
        printf("%d",rez[i]);
    return 0;
}