Cod sursa(job #575324)

Utilizator borsoszalanBorsos Zalan borsoszalan Data 8 aprilie 2011 10:08:45
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<stdio.h>
#define M 2000010

int a,b,d, que[M], tata[M], semn[M], low=1, high=1 , akt, nr,i, rez[M];
bool viz[M];

int cmmd(int a, int b)
{
	if(!b)
		return a;
	else return cmmd(b, a%b);
}

int main()
{
	freopen("multiplu.in", "r", stdin);
	freopen("multiplu.out", "w", stdout);
	scanf("%d%d", &a, &b);
	if(a>b)
	{
		d=a;
		a=b;
		b=d;
	}
	d=cmmd(a,b);
	d=a*b/d;
	que[1]=1;
	semn[1]=1;
	tata[1]=-1;
	viz[1]=true;
	while(!viz[0])
	{
		akt=que[low];
		if(!viz[akt*10%d])
		{
			viz[akt*10%d]=true;
			que[++high]=akt*10%d;
			tata[high]=low;
		}
		if(!viz[(akt*10+1)%d]&&!viz[0])
		{
			viz[(akt*10+1)%d]=true;
			que[++high]=(akt*10+1)%d;
			tata[high]=low;
			semn[high]=1;
		}
		low++;
	}
	akt=high;
	while(akt!=-1)
	{
		rez[++nr]=semn[akt];
		akt=tata[akt];
	}
	for(i=nr;i>=1;i--)
		printf("%d", rez[i]);
	return 0;
}