Mai intai trebuie sa te autentifici.
Cod sursa(job #779743)
Utilizator | Data | 18 august 2012 17:29:09 | |
---|---|---|---|
Problema | Koba | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.88 kb |
#include<stdio.h>
FILE *f = fopen("koba.in","r");
FILE *g = fopen("koba.out","w");
#define MaxT 1100
int N,T1,T2,T3,Sol;
int A[MaxT],Best[MaxT];
void citire(void)
{
fscanf(f,"%d %d %d %d\n",&N,&T1,&T2,&T3);
}
void Rezolvare(void)
{
int aux,i,nr;
T1 %= 10; T2 %= 10; T3 %= 10;
Sol += T1 + T2 + T3;
A[T3] = 1; Best[T3] = T3;
A[T2*10+T3] = 2; Best[T2*10+T3] = T2+T3;
A[T1*100+T2*10+T3] = 3;
Best[T1*100+T2*10+T3] = Sol;
for(i=4;i<=N;i++)
{
aux = (T3 + T2*T1)%10,T1 = T2,T2 = T3,T3 = aux,Sol += aux;
nr = T1*100+T2*10+T3;
if(A[nr])
break;
Best[nr] = Sol;
A[nr] = i;
}
N -= i;
if(N > 0)
{
Sol += (N/(i-A[nr]))*(Sol-Best[nr]);
N %= (i-A[nr]);
for(i=1;i<=N;i++)
aux = (T3 + T2*T1)%10,T1 = T2,T2 = T3,T3 = aux,Sol += aux;
}
}
int main()
{
citire();
Rezolvare();
fprintf(g,"%d\n",Sol);
}