Cod sursa(job #799064)

Utilizator crazzytudTudor Popa crazzytud Data 17 octombrie 2012 20:23:45
Problema Multiplu Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<fstream>
#include<queue>
#define NMAX 2000002
using namespace std;

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


queue <int> q;
int cifra[NMAX],pred[NMAX];
bool viz[NMAX];
int C;
void solve(int poz)
{
    int c=cifra[poz];

    if(pred[poz]==0)
    {
        out << c;
        return;
    }
    solve(pred[poz]);
    out << c;

}

void lee()
{
    int curent,nou;
    cifra[1]=1;
    viz[1]=1;
    q.push(1);

    while(!q.empty())
    {
        curent = q.front();
        q.pop();

        if(curent == 0)
            solve(0);


        nou = (curent * 10) % C;
        if(viz[nou]==0)
        {
            viz[nou] = 1;
            cifra[nou] = 0;
            pred[nou] = curent;
            q.push(nou);
        }
        nou += 1; nou %= C;
        if(viz[nou]==0)
        {
            viz[nou] = 1;
            cifra[nou] = 1;
            pred[nou] = curent;
            q.push(nou);
        }
    }
}

int cmmmc(int a,int b)
{
    int r, prod;
    prod = a * b;

    while(b)
    {
        r = a % b;
        a = b;
        b = r;
    }
    return prod / a;
}

int main()
{
    int x,y;
    in>>x>>y;
    C=cmmmc(x,y);


    lee();
    return 0;
}