Cod sursa(job #2016473)

Utilizator LucianTLucian Trepteanu LucianT Data 29 august 2017 14:48:19
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <bits/stdc++.h>
using namespace std;
const int maxN=1e5+4;

int n,sol;
int manacher[maxN];
int v[maxN],diff[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++)
        diff[i]=v[i+1]-v[i];

    int idx=0,center=0;
    for(int i=1;i<n;i++)
    {
        if(i<=idx)
            manacher[i]=min(idx+1-i,manacher[center-(i-center)]);

        while(i+manacher[i]<n && i-manacher[i]>0 &&diff[i+manacher[i]]==diff[i-manacher[i]])
            manacher[i]++;

        if(i+manacher[i]-1>idx){
            idx=i+manacher[i]-1;
            center=i;
        }

        sol+=manacher[i];
    }

    printf("%d",sol);
    return 0;
}