Cod sursa(job #2354418)

Utilizator popabogdanPopa Bogdan Ioan popabogdan Data 25 februarie 2019 12:09:01
Problema Numarare Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>

#define Nmax 100005
#define ll long long

using namespace std;

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

int N;
int A[Nmax], Dif[Nmax], D[Nmax];

int main()
{
    fin >> N;
    for(int i = 1; i <= N; i++)
        fin >> A[i];
    if(N == 1)
    {
        fout << "0\n";
        return 0;
    }
    for(int i = 1; i < N; i++)
        Dif[i] = A[i + 1] - A[i];
    int le = 1, ri = 1, len = 0;
    D[1] = 0;
    ll ans = 1;
    for(int i = 2; i < N; i++)
    {
        if(i > ri)
            len = 0;
        else
            len = min(ri - i, D[le + ri - i]);
        while(i - len >= 1 && i + len < N && D[i - len] == D[i + len])
            len++;
        ans += len;
        len--;
        D[i] = len;
        if(i + len > ri)
        {
            ri = i + len;
            le = i - len;
        }
    }
    fout << ans << "\n";
    return 0;
}