Cod sursa(job #673256)

Utilizator HoriaClementHoriaC HoriaClement Data 4 februarie 2012 10:34:04
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<fstream>
#include<queue>
#include<vector>
using namespace std;

const int N=2000005;

queue<int> q;
int a,b,x,y,M,p[N],u[N];

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

void citire()
{
    in>>a>>b;
    for(int i=1;i<=N;++i)
        u[i]=-1;
}

int cmmdc(int a,int b)
{
    int r;
    while(b)
    {
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}
int cmmmc(int a,int b)
{
    return a*b/cmmdc(a,b);
}
void rebuild(int y)
{
    /*
    if(y==1)
    {
        out<<y;
        return ;
    }
    rebuild(p[y]);
    */
    if(y!=1) rebuild(p[y]);
    out<<u[y];
}

void bfs()
{
    u[0]=-1;
    if(M==1)
    {
        out<<'1\n';
        return ;
    }
    p[1]=1;
    u[1]=1;
    q.push(1);
    while(!q.empty())
    {
        x=q.front();
        q.pop();
        y=(x*10)%M;
        if(u[y]==-1)
        {
            q.push(y);
            u[y]=0;
            p[y]=x;
        }
        if(y==0)
            break;
        y=(x*10+1)%M;
        if(u[y]==-1)
        {
            q.push(y);
            u[y]=1;
            p[y]=x;
        }
        else
            continue;
        if(y==0)
            break;
    }
    rebuild(0);

}
int main()
{
    citire();
    M=cmmmc(a,b);
    bfs();
    out<<'\n';
    return 0;
}