Cod sursa(job #2217880)

Utilizator stelian2000Stelian Chichirim stelian2000 Data 2 iulie 2018 14:59:49
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <bits/stdc++.h>

using namespace std;

int v[100010],d[100010];

int main()
{
    freopen("numarare.in","r",stdin);
    freopen("numarare.out","w",stdout);
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&v[i]);
    for(int i=1;i<n;i++) v[i]-=v[i+1];
    n--;
    int poz=0,l=0;
    for(int i=1;i<=n;i++)
    {
        if(d[i]+i<poz+l) d[i]=min(poz+l-i,d[2*poz-i]);
        if(d[i]+i>=poz+l) while(i+d[i]<n && i-d[i]>1 && v[i+d[i]+1]==v[i-d[i]-1]) d[i]++;
        if(i+d[i]>poz+l) {poz=i;l=d[i];}
    }
    long long sol=0;
    for(int i=1;i<=n;i++) sol+=d[i]+1;
    printf("%lld",sol);
    return 0;
}