Cod sursa(job #115723)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 16 decembrie 2007 21:06:27
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>

#define fin  "multiplu.in"
#define fout "multiplu.out"

const int Nmax = 2001000;

int A,B,C;
int tat[Nmax];
char cif[Nmax];
int tail[Nmax],st,dr;

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

void go()
{
	int i,tmp,old;

	old = dr;

	for ( i = st ; i <= old ; ++i )
	{
		tmp = tail[i] * 10 % C;

		if ( !tat[ tmp ] )
		{
			tat [ tmp ] = tail[i];
			cif [ tmp ] = '0';
			 
			++dr;
			tail[dr]=tmp;
		}

		tmp = ( tail[i] * 10 + 1 ) % C;

		if ( !tat[ tmp ] )
		{
			tat [ tmp ] = tail[i];
			cif [ tmp ] = '1';

			++dr;
			tail[dr]=tmp;
		}	
	}

	st = old + 1;

	if ( st <= dr && !tat[0] )
		go();
}

void print(int p)
{
	if ( tat[p] != p )
		print(tat[p]);
	printf("%c",cif[p]);
}

int main()
{
	freopen(fin,"r",stdin);
	freopen(fout,"w",stdout);

	scanf("%d%d",&A,&B);

	C = A * B / gcd(A,B);

	tat[1]=1;
	cif[1]='1';

	tail[1]=1;
	st = dr = 1;

	go();
	print(0);

	printf("\n");

	return 0;
}