Cod sursa(job #1459329)

Utilizator SilverShiftDeniz Ozguluk SilverShift Data 9 iulie 2015 16:44:01
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include<cstdio>
#include<algorithm>
using namespace std;
const int NMAX = 2000000;
struct QUEUE
{
    bool c;
    int r,pred;
};
int cmmmc(int a, int b)
{
    int r,p;
    p=a*b;
    while(b)
    {
        r=a%b;
        a=b;
        b=r;
    }
    return p/a;
}
QUEUE q[NMAX];
bool f[NMAX];
bool sol[NMAX];
int main()
{
    freopen("multiplu.in","r",stdin);
    freopen("multiplu.out","w",stdout);
    int m,a,b,k=0,p,u,r0,r1,i;
    scanf("%d%d",&a,&b);
    m=cmmmc(a,b);
    if(a*b==1)
    {
        printf("1");
        return 0;
    }
    p=u=1;
    q[u].c=1;
    q[u].r=1;
    q[u].pred=0;
    f[1]=1;
    while(p<=u)
    {
        r0=(q[p].r*10)%m;
        if(f[r0]==0)
        {
            ++u;
            f[r0]=1;
            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)
        {
            ++u;
            f[r1]=1;
            q[u].c=1;
            q[u].r=r1;
            q[u].pred=p;
        }
        if(r1==0)
        {
            break;
        }
        p++;
    }
    while(q[u].pred)
    {
        sol[++k]=q[u].c;
        u=q[u].pred;
    }
    sol[++k]=q[1].c;
    reverse(sol+1,sol+k+1);
    for(i=1; i<=k; i++)
        printf("%d",sol[i]);
    return 0;
}