Cod sursa(job #1472524)

Utilizator cristina_borzaCristina Borza cristina_borza Data 17 august 2015 12:06:14
Problema Koba Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <fstream>

using namespace std;

ifstream f("koba.in") ;
ofstream g("koba.out") ;

long long n , t1 , t2 , t3 , t4 , sol , number[1005] , sum[1005] , i ;
long long calc(long long t1 , long long t2 , long long t3 , long long nr) ;

int main()
{
    f >> n >> t1 >> t2 >> t3 ;

    t1 %= 10 , t2 %= 10 , t3 %= 10 ;

    sum[t3 * 100 + t2 * 10 + t1]  = t1 + t2 + t3 ;
    number[t3 * 100 + t2 * 10 + t1]  = 1 ;

    for(int i = 4 ; i <= n ; ++i){
        int t4 = (t3 + t2 * t1) % 10 ;

        if(number[t4 * 100 + t3 * 10 + t2] == 0){
            sum[t4 * 100 + t3 * 10 + t2] = sum[t3 * 100 + t2 * 10 + t1] + t4;
            number[t4 * 100 + t3 * 10 + t2] = number[t3 * 100 + t2 * 10 + t1] + 1 ;
        }
        else{
            long long t = t4 * 100 + t3 * 10 + t2 ;
            long long x = number[t3 * 100 + t2 * 10 + t1] + 1 - number[t] ;
            long long E = (n - number[t] - 2) ;

            sol = (E / x) * (sum[t3 * 100 + t2 * 10 + t1] + t4 - sum[t]);
            sol += calc(t2 , t3 , t4 , E % x) ;
            sol += sum[t4 * 100 + t3 * 10 + t2] ;

            break ;
        }

        sol = sum[t4 * 100 + t3 * 10 + t2] ;

        t1 = t2 ;
        t2 = t3 ;
        t3 = t4 ;

    }

    g << sol ;

    return 0;
}

long long calc(long long t1 , long long t2 , long long t3 , long long nr){
    long long sol = 0 ;

    for(int i = 1 ; i <= nr ; ++i){
        int t4 = (t3 + t2 * t1) % 10 ;
        t1 = t2 ;
        t2 = t3 ;
        t3 = t4 ;
        sol += t4 ;
    }

    return sol ;
}