Cod sursa(job #1492417)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 27 septembrie 2015 18:07:26
Problema Koba Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>

using namespace std;

int n,t1,t2,t3,nr,sc,d,x2,i,s,f[20000],v[10000],s2,s3,s4,a,b,c,r,x,ciclu,coada;

ifstream fin ("koba.in");

ofstream fout ("koba.out");

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;
        //fout<<d<<" "<<nr<<"\n";
        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;
    //fout<<coada<<" "<<ciclu<<"\n";
    s2 = s;
    sc = 0; //suma cozii
    for (i=1;i<=f[nr]-1;i++){
        s2-=v[i]; // suma ciclului
        sc+=v[i];
    }
    //fout<<sc<<" ";
    s3 = s2;
    s3*=(x2-2)/ciclu;
    for (i=f[nr];i<=f[nr]+r;i++)
        s3+=v[i];
    fout<<sc+s3;
    return 0;
}