Cod sursa(job #2272176)

Utilizator Andrei_CotorAndrei Cotor Andrei_Cotor Data 29 octombrie 2018 19:41:51
Problema Numarare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream>
using namespace std;
ifstream fi("numarare.in");
ofstream fo("numarare.out");
int n,x,i,y,A[100005],poz,sf,Lp[100005],j;
long long rez;
int main()
{
    fi>>n;
    fi>>x;
    for(i=2; i<=n; i++)
    {
        fi>>y;
        A[i-1]=y-x;
        x=y;
    }
    n--;
    poz=0;
    sf=0;
    for(i=1; i<=n; i++)
    {
        if(i>sf)
        {
            for(j=1; j<=min(i-1,n-i); j++)
                if(A[i-j]!=A[i+j])
                    break;
            Lp[i]=j;
            poz=i;
            sf=i+j-1;
        }
        else
        {
            if((poz-(i-poz))-Lp[poz-(i-poz)]+1>poz-Lp[poz]+1)
                Lp[i]=Lp[poz-(i-poz)];
            else
            {
                for(j=sf-i+1; j<=min(i-1,n-i); j++)
                    if(A[i-j]!=A[i+j])
                        break;
                Lp[i]=j;
                poz=i;
                sf=i+j-1;
            }
        }
        rez+=(1LL*Lp[i]);
    }
    fo<<rez<<"\n";
    fi.close();
    fo.close();
    return 0;
}