Cod sursa(job #1324598)

Utilizator kappykkDragos kappykk Data 22 ianuarie 2015 16:07:09
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <queue>
#define p push
#define VM 2000000
#include <algorithm>

using namespace std;

queue<int> c;
int lgmin[VM];
int pre[VM];
int uc[VM];

int cmmdc(int a, int b){
    while (b != 0){
        int aux = a % b;
        a = b;
        b = aux;
    }
    return a;
}

int cmmmc(int a, int b){
    return (a * b) / cmmdc(a , b);
}

int main()
{
    ifstream f("multiplu.in");
    ofstream g("multiplu.out");
    int a, b;
    f>>a;
    f>>b;
    int m = cmmmc(a , b);
    c.p(1);
    lgmin[1] = uc[1] = pre[1] = 1;
    while(!c.empty()){
        int fr = c.front();
        c.pop();
        int f1 = fr * 10  % m;
        int f2 = (fr * 10 + 1) % m;
        if(!lgmin[f1]){
            c.p(f1);
            lgmin[f1] = lgmin[fr] + 1;
            pre[f1] = fr;
            uc[f1] = 0;
            if(f1 == 0){
                break;
            }
        }
        if(!lgmin[f2]){
            c.p(f2);
            lgmin[f2] = lgmin[fr] + 1;
            pre[f2] = fr;
            uc[f2] = 1;
            if(f2 == 0){
                break;
            }
        }
    }
    string s;
    for(int i = 0 ; pre[i] != i ; i = pre[i]){
        s += (uc[i] + '0');
    }
    s += (uc[1] + '0');
    reverse(s.begin() , s.end());
    g<<s;
    return 0;
}