Cod sursa(job #243294)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 12 ianuarie 2009 17:02:11
Problema Multiplu Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>
struct queue
  {
  char cif;
  long r;
  long pred;
  };
long C,nr;
char f[2000001];// 2000001
char v[2000001];// 2000001
queue q[2000301];


void read()
{
freopen("multiplu.in","r",stdin);
freopen("multiplu.out","w",stdout);
long ca,cb,a,b,r;
scanf("%ld%ld",&a,&b);
ca=a;
cb=b;
while(a)
  {
  r=b%a;
  b=a;
  a=r;
  }
C=ca*cb/b;
}


void sol(long n)
{
v[++nr]=q[n].cif;
if(q[n].pred!=0)
  sol(q[n].pred);
}


void rez()
{
long u,p,r1,r2;
q[1].cif=1;
q[1].r=1;
q[1].pred=0;
f[1]=1;
u=p=1;
while(p<=u)
  {
// adaugam 1
  r1=(q[p].r*10+1)%C;
  if(f[r1]==0)
	 {
	 f[r1]=1;
	 q[++u].r=r1;
	 q[u].cif=1;
	 q[u].pred=p;
	 }
  if(r1==0)
	 {
	 sol(u);
	 break;
	 }
// adaugam 0
  r2=q[p].r*10%C;
  if(f[r2]==0)
	 {
	 f[r2]=1;
	 q[++u].r=r2;
	 q[u].cif=0;
	 q[u].pred=p;
	 }
  if(r2==0)
	 {
	 sol(u);
	 break;
	 }
  p++;
  }
}


void afisare()
{
long i;
for(i=nr;i>=1;i--)
  printf("%d",v[i]);
}


int main()
{
read();
rez();
afisare();
return 0;
}