Cod sursa(job #1347474)

Utilizator rughibemBelcineanu Alexandru Ioan rughibem Data 18 februarie 2015 23:19:32
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<stdio.h>
#define MAXAB 2000005
FILE *f=fopen("multiplu.in","r"), *g=fopen("multiplu.out","w");

long int A, B, LQ, LR;
bool ExistaRestul[MAXAB], R[MAXAB];

struct Coada{
    long int rest, vinedin;
    bool cifra;
} Q[MAXAB];

long int cmmmc( long int a, long int b ){
long int r=a%b, aa=a, bb=b;

    while( r>0 ){ a=b;b=r;r=a%b; }
    return (aa*bb)/b;

}

void Rezolva( long int C ){
long int k1, k2, restnou, k;

    if(C==1){fprintf(g,"1\n");return;}

    Q[1].cifra = 1; Q[1].rest = 1; Q[1].vinedin = 0;
    ExistaRestul[1]=1;

    k1=1; k2=1;
    while( k1 <= k2 ){

        restnou = (Q[k1].rest * 10) % C;
        if( ExistaRestul[restnou] == 0 ){
            k2++;
            Q[k2].cifra = 0; Q[k2].rest = restnou; Q[k2].vinedin = k1;
            ExistaRestul[restnou] = 1;
            if( restnou == 0 ) break;
        }

        restnou = (Q[k1].rest * 10 + 1) % C;
        if( ExistaRestul[restnou] == 0 ){
            k2++;
            Q[k2].cifra = 1; Q[k2].rest = restnou; Q[k2].vinedin = k1;
            ExistaRestul[restnou] = 1;
            if( restnou == 0 ) break;
        }

        k1++;
    }

    LR = 0; k = k2;
    while( k != 0 ){
        R[++LR] = Q[k].cifra;
        k = Q[k].vinedin;
    }
    for(long int i=LR;i>=1;i--) fprintf(g,"%ld",R[i]); fprintf(g,"\n");

}

int main(){

    fscanf(f,"%ld %ld\n",&A,&B);
    Rezolva( cmmmc(A,B) );

return 0;
}