Cod sursa(job #2715329)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 3 martie 2021 15:42:42
Problema Numarare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <bits/stdc++.h>

#define inf (1 << 30)
#define NMAX 100005
using namespace std;

ifstream fin("numarare.in");
ofstream fout("numarare.out");

int lps[NMAX], v[NMAX], sum[NMAX];

int main()
{
    int n;
    fin >> n;

    for(int i = 1; i <= n; ++i)
        fin >> v[i];

    for(int i = 1; i < n; ++i)
        sum[i] = v[i + 1] - v[i];
    int k = 0, left = 1, right = -1, rez = 0;
    for(int i = 1; i < n; i ++){
        if(i > right)
            k = 1;
        else k = min(right - i + 1, lps[left + right - i]);
        while(i - k >= 1 && i + k < n && sum[i + k] == sum[i - k])
            k ++;
        lps[i] = k--;
        rez += lps[i];
        if(i + k > right){
            right = i + k;
            left = i - k;
        }
    }
    fout << rez << '\n';
    return 0;
}