Cod sursa(job #1517862)

Utilizator bogdan10bosBogdan Sitaru bogdan10bos Data 4 noiembrie 2015 22:24:51
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <bits/stdc++.h>

#define INF (1 << 30)
#define LLINF (1LL << 62)
#define mod 666013

using namespace std;

int n, i, rgt, pal, sol;
int v[100005], l[100005];

int main()
{
    freopen("numarare.in", "r", stdin);
    freopen("numarare.out", "w", stdout);

    scanf("%d%d", &n, &v[1]);
    for(i = 2; i <= n; i++)
    {
        scanf("%d", &v[i]);
        v[i - 1] = v[i] - v[i - 1];
    }

    n--;

    rgt = pal = 0;
    for(i = 1; i <= n; i++)
    {
        if(rgt >= i)
        {
            if(l[2 * pal - i] < rgt - i + 1)
            {
                l[i] = l[2 * pal - i];
                sol += l[i];
                continue;
            }
            else
                l[i] = rgt - i + 1;
        }
        else
            l[i] = 1;

        while(v[i + l[i]] == v[i - l[i]] && i + l[i] <= n && i - l[i] >= 1)
            l[i]++;

        sol += l[i];

        if(i + l[i] - 1 > rgt)
        {
            rgt = i + l[i] - 1;
            pal = i;
        }
    }

    printf("%d", sol);

    return 0;
}