Cod sursa(job #1402557)

Utilizator akaprosAna Kapros akapros Data 26 martie 2015 17:26:30
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<cstdio>
#include<algorithm>
#include<cstring>
#define Nmax 2000005
using namespace std;
int i,j,a,b,p,m;
int w[Nmax],W[Nmax];
int V[Nmax],sol[Nmax];
int cmmdc(int d,int i)
{
    int r=d%i;
    while (r)
    d=i,i=r,r=d%i;
    return i;
}
int main()
{
    freopen("multiplu.in","r",stdin);
    freopen("multiplu.out","w",stdout);
    scanf("%d %d",&a,&b);
    if (a<b) swap(a,b);
    m=(a*b)/cmmdc(a,b);
    w[1]=2;
    V[++V[0]]=1;
    while (!w[0])
    {
        for (i=1;i<=V[0];i++)
        {
            if (!w[(V[i]*10)%m])
            {
                w[(V[i]*10)%m]=1;
                W[(V[i]*10)%m]=V[i];
                V[++V[0]]=(V[i]*10)%m;
                if (w[0]) break;
            }
            if (!w[((V[i]*10)+1)%m])
            {
                w[((V[i]*10)+1)%m]=2;
                W[((V[i]*10)+1)%m]=V[i];
                V[++V[0]]=((V[i]*10)+1)%m;
                if (w[0])
                break;
            }
        }
    }
    i=V[V[0]];
    do
    {
        sol[++sol[0]]=w[i]-1;
        i=W[i];
    }while(i);
    for (i=sol[0];i>=1;i--)
    printf("%d",sol[i]);
    return 0;
}