Cod sursa(job #2345441)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 16 februarie 2019 12:49:12
Problema Koba Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>

using namespace std;

ifstream fin ("koba.in");
ofstream fout ("koba.out");
long long n,t1,t2,t3,nr,sc,d,x2,i,s,s2,s3,s4,a,b,c,r,x,ciclu,coada;
long long f[20000],v[10000];
int main (){

    fin>>n>>t1>>t2>>t3;
    if (n == 1){
        fout<<t1%10;
        return 0;
    }
    if (n == 2){
        fout<<t1%10+t2%10;
        return 0;
    }
    if (n == 3){
        fout<<t1%10+t2%10+t3%10;
        return 0;
    }
    a = t1, b = t2, c = t3;
    v[1] = a%10, v[2] = b%10, v[3] = c%10;
    s = a%10 + b%10 + c%10;
    f[a%10*100 + b%10*10 + c%10] = 3;
    for (i=4;i<=n;i++){
        d = (c + b*a) % 10;
        a = b%10, b = c%10, c = d%10;
        nr = a*100+b*10+c;
        v[i] = d;
        if (f[nr] != 0)
            break;
        f[nr] = i;
        s += d%10;
    }
    if (i > n){
        fout<<s;
        return 0;
    }

    ciclu = i-f[nr];
    coada = i-ciclu;
    x2 = n-coada;
    r = x2 % ciclu;

    s2 = s;
    sc = 0; ///suma cozii
    for (i=1;i<=f[nr]-1;i++){
        s2 -= v[i]; /// suma ciclului
        sc += v[i];
    }

    s3 = s2;
    s3 *= (x2-2)/ciclu;
    for (i=f[nr];i<=f[nr]+r;i++)
        s3 += v[i];

    fout<<sc+s3;

    return 0;
}