Cod sursa(job #1436000)

Utilizator SpiriFlaviuBerbecariu Flaviu SpiriFlaviu Data 14 mai 2015 21:16:28
Problema Multiplu Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <iostream>
#include <vector>
#include <set>
#include <queue>
#include <algorithm>
#include <string>
#include <fstream>
#include <cctype>
#include <iomanip>
#include <cmath>
#include <cstring>
#include <map>
#include <bitset>
#include <stack>
/*  //c++11
#include <unordered_map>
#include <unordered_set>
#include <tuple>
*/

using namespace std;

ifstream fin("multiplu.in");
ofstream fout("multiplu.out");

int cmmdc(int a, int b)
{
    if(b == 0)
        return a;
    return cmmdc(b,a%b);
}

int t[2000001];
int nrc[2000001];
bitset<2000001> c;

queue<int> Q;

void fa(int r, int x, int cif)
{
    if(!(nrc[x] + 1 < nrc[r] || nrc[r] == 0))
        return;
    nrc[r] = nrc[x] + 1;
    t[r] = x;
    c[r] = cif;
    Q.push(r);
}

void afis(int x)
{

    if(x != 1)
        afis(t[x]);
    fout<<c[x];

}

int main()
{
    //freopen("1.in","r",stdin);
    //freopen("1.out","w",stdout);
    int a, b;
    fin>>a>>b;
    int div = a*b/cmmdc(a,b);



    Q.push(1);
    c[1] = 1;
    nrc[1] = 1;
    bool found = false;
    while(!Q.empty() && !found)
    {
        int x = Q.front();
        if(x == 0)
        {
            afis(x);
            found = true;
            continue;
        }
        Q.pop();
        int rest1 = (x*10)%div;
        int rest2 = (x*10+1)%div;
        fa(rest1, x, 0);
        fa(rest2, x, 1);
    }

    return 0;
}


//FILE!!!