Cod sursa(job #172265)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 5 aprilie 2008 23:50:51
Problema Koba Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
int a[12][10][10],m,a1,a2,a3,s=0,poz,c1,c2,c3,n,v[100000];
int caut(){
	int i,a4;
	s=a1+a2+a3;
	a[a1][a2][a3]=1;
	v[0]=3;
	v[1]=a1;v[2]=a2;v[3]=a3;
	for(i=2;i<=n;i++){
		a4=(a3+a1*a2)%10;
		a1=a2;a2=a3;a3=a4;
		if(a[a1][a2][a3]!=0) {
			s-=a1+a2;
			poz=a[a1][a2][a3]-1;
			v[0]-=2;
			return i-1;
		}
		v[++v[0]]=a3;
		a[a1][a2][a3]=i;
		s+=a3;
	}
	return 0;
}
int stg(){
	int i,sum=c1+c2+c3,x;
	if(poz==0) return 0;
	if(poz==1) return c1;
	if(poz==2) return c1+c2;
	if(poz==3) return c1+c2+c3;
	for(i=4;i<=poz;i++){
		x=(c3+c1*c2)%10;
		c1=c2;c2=c3;c3=x;
		sum+=c3;
	}
	return sum;
}
int main(){
	int i,fin,sum,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;
	fin=caut();
	sum=s-stg();
	n-=fin;
	s+=sum*(n/(fin-poz));
	a3=v[v[0]];a2=v[v[0]-1];a1=v[v[0]-2];
	for(i=1;i<=n%(fin-poz);i++){
		a4=(a3+a1*a2)%10;
		a1=a2;a2=a3;a3=a4;
		s+=a3;
	}
	printf("%d",s);
}