Cod sursa(job #972507)

Utilizator poptibiPop Tiberiu poptibi Data 11 iulie 2013 21:27:13
Problema Koba Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;


int Used[15][15][15], T1, T2, T3, Steps, N, Sum[110], Tail_Length, Cycle_Length;

int main()
{
    freopen("koba.in", "r", stdin);
    freopen("koba.out", "w", stdout);

    scanf("%i %i %i %i", &N, &T1, &T2, &T3);

    T1 %= 10, T2 %= 10, T3 %= 10;
    Sum[ ++ Steps ] = T1;
    Sum[ ++ Steps ] = T1 + T2;
    while(!Used[T1][T2][T3])
    {
        Sum[ ++ Steps ] = Sum[ Steps - 1] + T3;
        Used[T1][T2][T3] = Steps;
        int AuxT2 = T2, AuxT3 = T3;
        T3 = (T3 + T1 * T2) % 10;
        T2 = AuxT3;
        T1 = AuxT2;
    }

    Tail_Length = Used[T1][T2][T3] - 1;
    Cycle_Length = Steps - Tail_Length;

    if(N <= Tail_Length) printf("%i\n", Sum[N]);
    else printf("%i\n", Sum[Tail_Length] + ((N - Tail_Length) / Cycle_Length) * (Sum[Steps] - Sum[Tail_Length]) + Sum[Tail_Length + ((N - Tail_Length) % Cycle_Length)] - Sum[Tail_Length]);
    return 0;
}