Cod sursa(job #148127)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 3 martie 2008 22:04:06
Problema Multiplu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<stdio.h>
#include<string.h>
#define N 100000
#define CIF 100
int coada[N][CIF];
bool v[N];
int mod(int A[], int B){
    int i, t = 0;
    for (i = 1; i <= A[0]; ++i)
        t = (t * 10 + A[i]) % B;
    return t;
}
void copie(int a[],int b[]){
	for (int i=0;i<=b[0];++i)
		a[i]=b[i];
}
void scrie(int u){
	for (int i=1;i<=coada[u][0];++i)
		printf("%d",coada[u][i]);
}
int cmmdc(int a,int b){  
    if (b==0)  
       return a;  
    else return cmmdc(b,a%b);  
} 
int main(){
	int p,u,r,n,i,a,b;
	p=u=0;
	freopen("multiplu.in","r",stdin);
	freopen("multiplu.out","w",stdout);
	scanf("%d%d",&a,&b);
	n=a*b/cmmdc(a,b);
	//printf("%d ",n);
	for(i=0;i<n;++i)
		v[i]=false;
	coada[u][1]=1;coada[u++][0]=1;
	v[1]=true;
	while(p<u && (!v[0])){
		coada[p][0]++;
		coada[p][coada[p][0]]=0;
		r=mod(coada[p],n);
		if(!v[r]){
			v[r]=true;
			copie(coada[u],coada[p]);
			++u;
		}
		if(v[0]){
			scrie(u-1);
			return 0;
		}
		coada[p][coada[p][0]]=1;
		r=mod(coada[p],n);
		if(!v[r]){
			v[r]=true;
			copie(coada[u],coada[p]);
			++u;
		}
		if(v[0]){
			scrie(u-1);
			return 0;
		}
		++p;
	}
	return 0;
}