Cod sursa(job #251832)

Utilizator crawlerPuni Andrei Paul crawler Data 3 februarie 2009 14:16:21
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <stdio.h>

#define Nmax 2000100

char x[Nmax], sol[Nmax];
int t[Nmax], q[Nmax], v[Nmax], SOL; 

int cmmdc(int x,int y)
{
    if (y==0) return x;
    return cmmdc(y,x%y);    
}

int cmmmc(int x,int y)
{
    return (x/cmmdc(x,y))*y;    
}

int main()
{
    freopen("multiplu.in","r",stdin);
    freopen("multiplu.out","w",stdout);
    
    int a,b;
    
    scanf("%d%d", &a, &b);
    
    int m = cmmmc(a,b);
    
    int st=0, dr=1;
    
    q[1] = 1;
    x[1] = 1;
    v[1] = 1;
    t[1] = -1;
    
    while (st<dr)
    {
        int rest = q[++st], tmp;
        if (rest == 0) SOL = st;     
        if (rest == 0) break;
        tmp = (rest*10)%m;
        if (v[tmp] == 0)
        {
            v[tmp] = v[rest] + 1;
            q[++dr] = tmp;
            t[dr] = st;            
        }    
        tmp = (tmp+1)%m;
        if (v[tmp] == 0)
        {
            v[tmp] = v[rest] + 1;
            q[++dr] = tmp;
            t[dr] = st;            
            x[dr] = 1;
        }        
    }    
   
    int tmp = SOL;   
    
    for (int i=v[q[SOL]];i>0;--i)
    {
        sol[i] = x[tmp];
        tmp = t[tmp];    
    }
    
    for (int i=1;i<=v[q[SOL]];++i)
    printf("%c", sol[i]+48);
    
    printf("\n");
    
    return 0;    
}