Cod sursa(job #354088)

Utilizator APOCALYPTODragos APOCALYPTO Data 6 octombrie 2009 23:40:43
Problema Multiplu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<cstdio>

const int M = (1<<22);

int a,b,m,up[M],q[M],*r=new int[M];
short int cif[M];

int cmmdc(int a,int b)
{
	int r;
	while(b)
	{
		r=a%b;
		a=b;
		b=r;
	}
	return a;
}

void CL()
{
	int k=1,dimq=0,x,y,i;
	up[1]=1;
	cif[1]=1;
	q[++dimq]=1;
	r[1]=1;
	while(k<=dimq)
	{
		x=q[k++];
        for(i=0;i<=1;i++)
			{y=(x*10+i)%m;
			if(!r[y])
			{
				cif[y]=1;
				up[y]=x;
				q[++dimq]=y;
				r[y]=y;
			}
			if(y==0)
				return;
			}




	}
}

void drum(int x)
{
	if(x!=1)
		drum(up[x]);
	printf("%hd",cif[x]);
}

int main()
{
	freopen("multiplu.in","r",stdin);
	freopen("multiplu.out","w",stdout);
	scanf("%d%d",&a,&b);
	m=a*b/cmmdc(a,b);
	CL();
	drum(0);
	return 0;
}