Cod sursa(job #1459320)

Utilizator grimmerFlorescu Luca grimmer Data 9 iulie 2015 16:23:20
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("multiplu.in");
ofstream out("multiplu.out");
const int NMax = 2000000;
bool f[NMax];
int m,a,b,i,p,u;
struct coada{
    bool c;
    int r,pred;
};
coada q[NMax];
bool sol[NMax];
int cmmdc(int a,int b){
    int r;
    while(b){
        r=a%b;
        a = b;
        b = r;
    }
    return a;
}
int main()
{
    int r1,r0,j;
    in>>a>>b;
    m = (a*b)/cmmdc(a,b);
    p=u=1;
    q[u].c=1;
    q[u].r=1;
    q[u].pred=0;
    f[1]=1;
    if(a*b==1)
        out<<1<<'\n';
    else
    {
        while(p<=u){
            r0 = (q[p].r*10+0)%m;
            if(f[r0]==0){
                f[r0]=1;
                u++;
                q[u].c=0;
                q[u].r=r0;
                q[u].pred=p;
                if(r0==0)
                    break;
            }
            r1 = (q[p].r*10+1)%m;
            if(f[r1]==0){
                f[r1]=1;
                u++;
                q[u].c=1;
                q[u].r=r1;
                q[u].pred=p;
                if(r1==0)
                    break;
            }
            p++;
        }
        i=1;
        while(q[u].pred!=0){
            sol[i] = q[u].c;
            u=q[u].pred;
            i++;
        }
        sol[i]=1;
        for(j=i;j>=1;j--)
            out<<sol[j];
    }

    return 0;
}