Cod sursa(job #2182584)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 22 martie 2018 15:06:09
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<bits/stdc++.h>
#define maxN 100005
using namespace std;
long long sol=0;
int v[maxN],w[maxN],n,l,r,k,odd[maxN];
int main()
{
    freopen("numarare.in","r",stdin);
    freopen("numarare.out","w",stdout);

    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&v[i]);
    for(int i=1;i<n;i++)
        w[i]=v[i+1]-v[i];
    l=0;
    r=-1;
    for(int i=1;i<n;i++)
    {
        if(i>r) k=1;
            else
        k=min(odd[l+r-i],r-i);
        while((i+k)<n && w[i-k]==w[i+k]) k++;
        odd[i]=k;
        k--;
        if((i+k)>r)
        {
            r=i+k;
            l=i-k;
        }
        sol=sol+1LL*odd[i];
    }
    printf("%lld\n",sol);
    return 0;

}