Cod sursa(job #1097296)

Utilizator amina2002Abu Shanab Amina amina2002 Data 3 februarie 2014 11:59:40
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<cstdio>
using namespace std;
bool viz[2000005];
struct queue
{
    char c;
    int r,pred;
};
queue q[2000005];
int cmmdc(int a,int b)
{
    int r;
    while(b)
    {
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}
char sol[2000001];
int main()
{
    freopen("multiplu.in","r",stdin);
    freopen("multiplu.out","w",stdout);
    int a,b,m,p,k,i,u,r;
    queue temp;
    scanf("%d%d",&a,&b);
    m=a*b/cmmdc(a,b);
    p=u=1;
    q[p].c=1;
    q[p].r=1;
    q[p].pred=0;
    viz[1]=1;
    while(p<=u)
    {
        ///incerc varianta cu 0
        r=(q[p].r*10+0)%m;
        if(viz[r]==0)
        {
            temp.c=0;
            temp.r=r;
            temp.pred=p;
            q[++u]=temp;
            viz[r]=1;
        }
        if(r==0)
        {
            k=0;
            do
            {
                sol[++k]=q[u].c;
                u=q[u].pred;
            }
            while(u!=0);
            for(i=k;i>=1;i--)
                printf("%d",sol[i]);
            return 0;
        }
        ///incerc varianta cu 1
        r=(q[p].r*10+1)%m;
        if(viz[r]==0)
        {
            temp.c=1;
            temp.r=r;
            temp.pred=p;
            q[++u]=temp;
            viz[r]=1;
        }
        if(r==0)
        {
            k=0;
            do
            {
                sol[++k]=q[u].c;
                u=q[u].pred;
            }
            while(u!=0);
            for(i=k;i>=1;i--)
                printf("%d",sol[i]);
            return 0;
        }
        p++;
    }
    return 0;
}