Cod sursa(job #1061157)

Utilizator gerd13David Gergely gerd13 Data 19 decembrie 2013 12:39:28
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <queue>

using namespace std;

const int NMAX = 2000005 ;

int A, B, M, Father[NMAX], last[NMAX];



const char infile[] = "multiplu.in" ;
const char outfile[] = "multiplu.out" ;

ifstream cin(infile) ;
ofstream cout(outfile) ;

inline int GCD(int A, int B)
{
    int r;
    while(A % B != 0)
    {
        r = A % B;
        A = B;
        B = r;
    }
    return B;
}

void Write(const int &Node) {
    if(Node != 1) {
        Write(Father[Node]);
    }
    cout << last[Node] - 1;
}

int main()
{
    queue <int> Q ;
    cin >> A >> B ;
    M = (A * B) / GCD(A, B) ;
    Q.push(1 % M) ;
    last[1 % M ] = 2 ;
    Father[1 % M] = 1 ;
    while(!Q.empty() && last[0] == 0)
    {
        int actNumber = Q.front() ;
        Q.pop() ;
        for( int i = 0 ; i < 2 ; ++ i)
        {
            int newNumber = (actNumber * 10 + i) % M ;
            if(!last[newNumber])
            {
                Father[newNumber] = actNumber;
                last[newNumber] = i + 1;
                Q.push(newNumber);
            }
        }
    }

    Write(0) ;
    cin.close() ;
    cout.close();
    return 0;
}