Cod sursa(job #505885)

Utilizator alutzuAlexandru Stoica alutzu Data 4 decembrie 2010 13:16:36
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<cstdio>

const int NMAX = 1 << 21 ;

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

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

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

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

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