Cod sursa(job #116746)

Utilizator astronomyAirinei Adrian astronomy Data 19 decembrie 2007 14:20:28
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
#include <cstring>
using namespace std;

#define MAXN 2000100

int N, A, B, pred[MAXN], Q[MAXN];
char viz[MAXN], op[MAXN];

void solve(void)
{
    int inc, sf, x, r;
    
    Q[inc = sf = 0] = viz[1] = 1;

    while(inc <= sf)
    {
        x = Q[inc++];
        if(!viz[r=x*10%N]) Q[++sf] = r, pred[r] = x, viz[r] = 1;
        if(!viz[r=r+1>=N?r+1-N:r+1])
            Q[++sf] = r, pred[r] = x, op[r] = viz[r] = 1;
    }
}

int gcd(int a, int b) { return !b ? a : gcd(b, a%b); }

void rec(int r)
{
    if(r == 1) { printf("1"); }
    else rec(pred[r]), printf("%d", op[r]);
}

int main(void)
{
    freopen("multiplu.in", "rt", stdin);
    freopen("multiplu.out", "wt", stdout);

    scanf("%d %d", &A, &B);
    N = A*B/gcd(A, B);

    if(N == 1) { printf("1\n"); return 0; }
    solve();
    rec(0), printf("\n");

    return 0;
}