Cod sursa(job #1463057)

Utilizator ancabdBadiu Anca ancabd Data 19 iulie 2015 21:47:37
Problema Koba Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>

using namespace std;

ifstream fin ("koba.in");
ofstream fout ("koba.out");

int v[1000],per[1000];
int ok,n,i,sper=0,suma=0,poz;

inline int gaseste()
{
    for(int k=3;k<=i-3;++k)
        if(v[k]==v[i] && v[k-1]==v[i-1] && v[k-2]==v[i-2])
        {
            poz=k-3;
            return 1;
        }
    return 0;
}
void prelucreaza()
{
    for(int k=1;k<=poz;++k)
        suma+=v[k];
    for(int k=poz+1;k<=i-3;++k)
        per[ ++per[0] ]=v[k];
}

int main()
{
    fin >> n;
    fin >> v[1] >> v[2] >> v[3];
    v[1]%=10; v[2]%=10; v[3]%=10;
    if(n<500)
    {
        for(i=4;i<=n;++i)
            v[i]=(v[i-1]+v[i-2]*v[i-3])%10;
        for(int i=1;i<=n;++i)
            suma+=v[i];
        fout << suma;
        return 0;
    }
    for(i=4;i<=n;++i)
    {
        v[i]=(v[i-1]+v[i-2]*v[i-3])%10;
        if(gaseste() )
        {
            prelucreaza();
            break;
        }
    }
    for(int j=1;j<=per[0];++j)
        sper+=per[j];
    suma+=sper*((n-poz)/per[0]);
    for(int i=1;i<=(n-poz)%per[0];++i)
        suma+=per[i];
    fout << suma;
    return 0;
}