Cod sursa(job #340261)

Utilizator blasterzMircea Dima blasterz Data 13 august 2009 21:39:19
Problema Koba Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>


bool use[10][10][10];

int t[10001];
int T1, T2, T3;
int n;

int main()
{
	freopen("koba.in","r",stdin);
	scanf("%d %d %d %d\n", &n, &t[1], &t[2], &t[3]);
	
	
	t[1] %= 10;
	t[2] %= 10;
	t[3] %= 10;
	
	use[t[1]][t[2]][t[3]] = 1;
	
	int i,m;
	
	for(m = 4; m <= 1000; ++m)
	{
		i = m;
		t[i] = t[i-1] + t[i-2] * t[i-3];
		t[i] %= 10;
		
		if(use[t[i-2]][t[i-1]][t[i]] == 1)
		{
			T1 = t[i-2];
			T2 = t[i-1];
			T3 = t[i];
			break;
		}
		use[t[i-2]][t[i-1]][t[i]] = 1;
	}
	
	int sum = 0;
	
//	for(i = 1; i <= m; ++i) printf("%d ", t[i]);
//	printf("\n");
	if(n <= m)
	{
		for(i = 1; i <= n; ++i) 
			sum += t[i];
	}
	else
	{
		for(i = 1; i <= m; ++i)
			if(t[i] == T1 && t[i+1] == T2 && t[i+2] == T3) break;
		
		int p = i;
			
		for(i = 1; i < p; ++i) sum += t[i];
		
		int s = 0;
		
		for(i = p; i <= m - 3; ++i)
			s += t[i];
		
		n -= p-1;
		
		//printf("s:%d \n",s); 
		sum += s * (n / (m-3-p+1));
		
		//printf("%d %d\n",n, m-3-p+1);
		
		int r = n % (m-3-p+1);
		
	//	printf("%d\n",r);
		
		for(i = p; i < p + r; ++i) sum += t[i];
		
		
		
	}
	
	freopen("koba.out","w",stdout);
	printf("%d\n", sum);
	
	return 0;
}