Cod sursa(job #148473)

Utilizator sory1806Sandu Sorina-Gabriela sory1806 Data 4 martie 2008 13:13:57
Problema Multiplu Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<fstream.h>
#define max 2000
long uz[max], a, b, m;
ifstream f("multiplu.in");
ofstream g("multiplu.out");

void cmmmc(long a, long b, long & m);
long cmmdc(long a, long b);
void solve();

int main()
{       f>>a>>b;
	cmmmc(a, b, m);
	solve();
	return 0;
}

void cmmmc(long a, long b, long & m)
{       m=cmmdc(a, b);
	m=a/m;
	m=m*b;
}

long cmmdc(long a, long b)
{       if(a==0)
		return b;
	if(b==0)
		return a;
	if(a>b)
		return cmmdc(a%b, b);
	else
		return cmmdc(a, b%a);
}

void solve()
{       struct
	{       long x, bk, mod;
	}	c[max];
	long p, u, k, bk, mod, i, md;
	p=1; u=1;
	c[p].x=1; c[p].bk=-1; c[p].mod=1; uz[1]=1;
	while(p<=u)
	{       mod=c[p].mod;
		for(i=0; i<=1; i++)
		{       md=(mod*10+i)%m;
			if(uz[md]==0)
			{	u++;
				c[u].x=i;
				c[u].mod=md;
				c[u].bk=p;
				uz[md]=1;
			}
			if(uz[0]==1)
				break;
		}
		if(uz[0]==1)
			break;
		p++;
	}
	k=0; uz[k]=c[u].x; bk=c[u].bk;
	while(bk>0)
	{	k++;
		uz[k]=c[bk].x;
		bk=c[bk].bk;
	}
	for(i=k; i>=0; i--)
	{	g<<uz[i];
	}
	g<<'\n';
}