Cod sursa(job #172255)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 5 aprilie 2008 23:31:07
Problema Koba Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
int a[15][15][15],n,a1,a2,a3,s,poz;
int caut(){
	int i,a4;
	s=a1+a2+a3;
	a[a1][a2][a3]=1;
	for(i=2;i<=n;i++){
		a4=(a3+a1*a2)%10;
		a1=a2;a2=a3;a3=a4;
		if(a[a1][a2][a3]!=0){ poz=a[a1][a2][a3]-1; s-=a2+a1; return i-1;  }
		else {
			a[a1][a2][a3]=i;
			s+=a3;
		}
	}
	return 0;
}
int suma_partiala(int b,int c,int d){
	int sum=b+c+d,x,i;
	if(poz==0) return 0;
	if(poz==1) return b;
	if(poz==2) return b+c;
	if(poz==3) return b+c+d;
	for(i=4;i<=poz;i++){
		x=(d+b*c)%10;
		b=c;c=d;d=x;
		sum+=d;
	}
	return sum;
}
int main(){
	int i,c1,c2,c3,f,sum,x,y,m,a4;
	freopen("koba.in","r",stdin);
	freopen("koba.out","w",stdout);
	scanf("%d%d%d%d",&n,&a1,&a2,&a3);
	a1%=10;a2%=10;a3%=10;
	c1=a1;c2=a2;c3=a3;
	f=caut();
	if(f==0){
		printf("%d",s);
		return 0;
	}
	sum=s-suma_partiala(c1,c2,c3);
	n-=f;
	m=f-poz;
	x=n/m;
	y=n%m;
	s+=sum*x;
	for(i=1;i<=y;i++){
		a4=(a3+a2*a1)%10;
		a1=a2;a2=a3;a3=a4;
		s+=a3;
	}
	printf("%d",s);
}