Cod sursa(job #116461)

Utilizator za_wolfpalianos cristian za_wolf Data 18 decembrie 2007 17:37:37
Problema Multiplu Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
long in,sf,z[100001],kk,dif,pp,q,i,j,k,l,n,poz,m,a,s,p;
char y[2000002];
struct abc
{
	long c,r,p;
};
abc x[2000002];


long euclid(long a,long b)
{
	long r;
	while (b)
	{
		r=a%b;
		a=b;
		b=r;
	}
	return a;
}


int main()
{
	freopen("multiplu.in","r",stdin);
	freopen("multiplu.out","w",stdout);
	scanf("%ld%ld",&p,&pp);
	k=euclid(p,pp);
	k=(p*pp)/k;
	x[1].c=1;
	x[1].r=1;
	x[1].p=0;
	in=1;
	sf=1;
	y[1]=1;
	while (in<=sf)
	{
		if (y[(x[in].r*10+1)%k]==0)
		{
			sf++;
			x[sf].r=(x[in].r*10+1)%k;
			x[sf].c=1;
			x[sf].p=in;
			y[x[sf].r]=1;
			if (x[sf].r==0) {in=sf+10;poz=sf;}
		}

		if (y[(x[in].r*10)%k]==0&&in<=sf)
		{
			sf++;
			x[sf].r=(x[in].r*10)%k;
			x[sf].c=0;
			x[sf].p=in;
			y[x[sf].r]=1;
			if (x[sf].r==0) {in=sf+10;poz=sf;}
		}
		in++;
	}

	if (poz==0) printf("0\n"); else
	{
	while (x[poz].p!=0)
	{
		z[++m]=x[poz].c;
		poz=x[poz].p;
	}
	m++;
	z[m]=1;
	for (i=m;i>=1;i--)
	printf("%ld",z[i]);
	printf("\n");
	}
	return 0;
}