Cod sursa(job #419115)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 16 martie 2010 22:37:06
Problema Koba Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <cstdio>

#define file_in "koba.in"
#define file_out "koba.out"

#define Max 100

int s2,n,t1,t2,t3,i,s,r,j,poz1,poz2,t11,t22,t33,r1,r2,r3,r11,r22,r33,v[1000000],nr,suma;

int main()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d %d %d", &n, &t1, &t2, &t3);
	
	
	int find=0;
	if (t1==t3)
		find+=(t1%10+t3%10)%10;
	else
		if (t1==t2)
		find+=(t1%10+t2%10)%10;
		else
			if (t2==t3)
		find+=(t2%10+t3%10)%10;
	/*if (t1>t3 && t2>t3)
		find=t1%10+t2%10+t3%10;*/
		//while(1) nr++;
	//printf("%d\n", find);
	t1%=10;
	t2%=10;
	t3%=10;
    s=t1+t2+t3;
	v[1]=t1;
	v[2]=t2;
	v[3]=t3;
	nr=3;
	s2+=s;
	for (i=4;i<=Max;++i)
	{
		int ok=1;
		r1=(t1*t2+t3)%10;
	    r=(t1%10)*(t2%10)+(t3%10);
		//printf("%d\n", r1);
		v[i]=r1;
		s+=r1;
		s2+=r%10;
		t1=t2;
		t2=t3;
		t3=r1;		
	}
	
	//printf("%d\n", s2);
	
	
/*	poz1=0;
	for (i=Max;i>=1 && !poz1;--i)
	{
		r1=v[i];
		r2=v[i-1];
		r3=v[i-2];
		for (j=Max;j>=3 && !poz1;--j)
		{
			r11=v[j];
			r22=v[j-1];
			r33=v[j-2];
			
			if (r1==r11 && r2==r22 && r3==r33)
			{
				poz1=i;
				poz2=j;
			}
		}
	}*/
	r1=v[Max];
	r2=v[Max-1];
	r3=v[Max-2];
	for (j=Max-1;j>=3 && !poz2;--j)
		{
			r11=v[j];
			r22=v[j-1];
			r33=v[j-2];
			
			if (r1==r11 && r2==r22 && r3==r33)
			{
				poz2=j;
				//poz2=j;
			}
		}
	
	
	//poz2--;
	int rep=Max-poz2;
    suma=0;
    for (i=Max-rep+1;i<=Max;++i)
         suma+=+v[i];
	n=n-Max;
	int imp;
	//if (n%rep==0)
		imp=n/rep;
	//else
		//imp=n/rep-1;
    s+=imp*suma;     
    n-=imp*rep;
    for (i=1;i<=n;++i)
         s+=v[Max-rep+i-2];
    if (find!=0) 
	{
		//printf("a intrat");
		printf("%d\n", s-find);
	}
	else
		printf("%d\n", s);
		
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}