Cod sursa(job #520963)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 10 ianuarie 2011 21:48:26
Problema Koba Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>

FILE*f=fopen("koba.in","r");
FILE*g=fopen("koba.out","w");

int T1,T2,T3,T4,R,i,j,N;
int Viz[1001],Viz2[1001];
int tr(int a,int b,int c){
	int aux = c * 100 + b * 10 + a;
	return aux;
}

int main () {
	
	fscanf(f,"%d %d %d %d",&N,&T1,&T2,&T3); T1 %= 10; T2 %= 10; T3 %= 10;
	R = Viz[tr(T1,T2,T3)] = T1 % 10  + T2 %10 + T3 %10 ;
	Viz2[tr(T1,T2,T3)] = 3;
	for ( i = 4 ; i <= N ; ++i ){
		T4 = (T3 + T2 * T1 ) % 10;
		R += T4;
		T1 = T2; T2 = T3; T3 = T4;
		if ( !Viz[tr(T1,T2,T3)] ){
			Viz[tr(T1,T2,T3)] = R;
			Viz2[tr(T1,T2,T3)] = i;
		}
		else{
			break;
		}
		
	}
	if ( i <= N ){
		int prd = i - Viz2[tr(T1,T2,T3)];
		int sumprd = R - Viz[tr(T1,T2,T3)];
		int rep = ( N - i ) / prd;
		R += rep * sumprd;
		i += rep * prd;
	}
	
	for ( i = i + 1 ; i <= N ; ++i ){
		T4 = (T3 + T2 * T1 ) % 10;
		R += T4;
		T1 = T2; T2 = T3; T3 = T4;
	}
	
	fprintf(g,"%d\n",R);
	
	fclose(f);
	fclose(g);
	
	return 0;
}