Cod sursa(job #413510)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 8 martie 2010 18:02:54
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#define DIM 2000001

int c[DIM],t[DIM];
char viz[DIM],d[DIM],sol[DIM];
int x,a,b,p,u,ok,k,r,i;

int cmmdc(int a, int b) {
	int r;
	while (b!=0) {
		r = a % b;
		a = b;
		b = r;
	}
	return a;
}

int main() {
	
	FILE *f1 = fopen("multiplu.in","r");
	FILE *f2 = fopen("multiplu.out","w");
	
	fscanf(f1,"%d %d",&a,&b);
	
	x = a*b / cmmdc(a,b);
	
	p = u = 1;
	c[u] = 1;
	t[1] = 0;
	d[1] = 1;
	viz[1] = 1;
	
	while (p <= u && !ok) {
		for (i=0; i<=1; i++) {
			r = (c[p]*10 + i) % x;
			if (!viz[r]) {
				u++;
				viz[r] = 1;
				c[u] = r;
				t[u] = p;
				d[u] = i;
				
				if (!r) {
					ok = 1;
					break;
				}
			}
		}
		p++;
	}
	
	while (u) {
		sol[++k] = d[u];
		u = t[u];
	}
	
	for (i=k; i>=1; i--)
		fprintf(f2,"%d",sol[i]);
	
	fclose(f1);
	fclose(f2);
	
	return 0;
}