Cod sursa(job #2912401)

Utilizator Gica-gicutaGeorge Gica-gicuta Data 8 iulie 2022 11:59:42
Problema Koba Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <fstream>

using namespace std;
ifstream cin("koba.in");
ofstream cout("koba.out");
int f[1005];
int s[100005];
int main()
{
    int n,sum=0;
    int a,b,c,d;
    int a1,b1,c1;
    cin>>n>>a>>b>>c;
    a%=10;
    b%=10;
    c%=10;
    switch(n)
    {
    case 1:
        cout<<a;
        break;
    case 2:
        cout<<a+b;
        break;
    case 3:
        cout<<a+b+c;
        break;
    }
    if(n>=4)
    {
        int rez;
        f[a*100+b*10+c]=1;
        s[1]=a;
        s[2]=a+b;
        s[3]=a+b+c;
        for(int i=4; i<=n; i++)
        {
            d=c+b*a;
            d%=10;
            s[i]=s[i-1]+d;
            a=b;
            b=c;
            c=d;
            //cout<<d<<" ";
            if(f[a*100+b*10+c]>0)
            {
                int last=f[a*100+b*10+c];
                sum=s[i-3]-s[last-1];
                int dif=i-2-last;
               // cout<<'\n'<<i<<" "<<last<<'\n';
                n-=last-1;
                rez=s[last-1]+sum*(n/dif);
                n%=dif;
                break;
            }
            else f[a*100+b*10+c]=i-2;
        }
        switch(n)
        {
        case 1:
            rez+=a;
            break;
        case 2:
            rez+=a+b;
            break;
        case 3:
            rez+=a+b+c;
            break;
        }
        if(n>3)
            rez+=a+b+c;
        for(int i=4; i<=n; i++)
        {
            d=c+b*a;
            d%=10;
            rez=rez+d;
            a=b;
            b=c;
            c=d;
        }
        cout<<rez;
    }
    return 0;
}