Cod sursa(job #505886)

Utilizator cioboata.iCioboata Ioan Liviu cioboata.i Data 4 decembrie 2010 13:16:50
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<cstdio>
const int N=1<<21;

int pred[N],ultim[N],q[N];
bool rest[N];


int euclid(int a,int b)
{
	int c;
	while(b)
	{
		c=a%b;
		a=b;
		b=c;
	}
	return a;
}

int cmmmc(int a,int b)
{
	return a*b/euclid(a,b);
}

void afisare(int q)
{
	if(pred[q]==-1)
	{
		printf("1");
		return ;
	}
	afisare ( pred[q] );
	printf("%d",ultim[q]);
}

void solve(int n)
{
	int p,u,c,nr;
	ultim[1]=1;
	q[1]=1;
	pred[1]=-1;
	rest[1]=true;
	p=u=1;
	while(p<=u)
	{
		for(c=0;c<=1;c++)
		{
			nr=(q[p]*10+c)%n;
			if(rest[nr]==0)
			{
				ultim[nr]=c;
				pred[nr]=q[p];
				rest[nr]=true;
				q[++u]=nr;
			}
			if(nr==0)
			{
				afisare(0);
				return ;
			}
		}
		++p;
	}
	afisare(0);
}

int main()
{
	freopen("multiplu.in","r",stdin);
	freopen("multiplu.out","w",stdout);
	int n,a,b;
	scanf("%d%d",&a,&b);
	n=cmmmc(a,b);
	solve(n);
	return 0;
}