Cod sursa(job #1126417)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 26 februarie 2014 23:13:20
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <cstdio>
#define Vmax 2000005

using namespace std;

struct nr
{
    int prec,c,r;
};
nr st[Vmax];
bool fr[Vmax];
int sol[Vmax];

inline int CMMC(int A, int B)
{
    int r,ca=A,cb=B;
    r=A%B;
    while(r)
    {
        A=B; B=r; r=A%B;
    }
    return (ca*cb)/B;
}

inline void Afisare(int p)
{
    int i;
    for(;p;sol[++sol[0]]=st[p].c,p=st[p].prec);
    for(i=sol[0];i;--i)
        printf("%d", sol[i]);
    printf("\n");
}

int main()
{
    int A,B,top=1,i=1,rest;
    freopen ("multiplu.in","r",stdin);
    freopen ("multiplu.out","w",stdout);
    scanf("%d%d", &A,&B);
    A=CMMC(A,B);
    st[1].prec=0; st[1].c=1; st[1].r=1;
    fr[1]=true;
    for(i=1;i<=top;++i)
    {
        rest=(st[i].r*10)%A;
        if(rest==0)
        {
            sol[++sol[0]]=0;
            Afisare(i);
            break;
        }
        else
            if(!fr[rest])
            {
                ++top;
                st[top].prec=i; st[top].c=0; st[top].r=rest;
                fr[rest]=true;
            }
        rest=(st[i].r*10+1)%A;
        if(rest==0)
        {
            sol[++sol[0]]=1;
            Afisare(i);
            break;
        }
        else
            if(!fr[rest])
            {
                ++top;
                st[top].prec=i; st[top].c=1; st[top].r=rest;
                fr[rest]=true;
            }
    }
    return 0;
}