Cod sursa(job #2957219)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 21 decembrie 2022 23:15:43
Problema Numarare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

const int NMAX=1e5+5;
const int INF=1e9;

int a[NMAX];
int v[NMAX];
int dp[NMAX];

int lung;

int main()
{
    int n,i,j,x=0,y=0,dist;
    long long kon=0;
    fin>>n;
    for(i=0;i<n;i++)
        fin>>a[i];
    for(i=0;i<n;i++)
        v[i]=a[i+1]-a[i];
    for(i=0;i<n-1;i++)
    {
        if(i>y)
            dist=1;
        if(i<=y)
            dist=min(y-i+1,dp[x+y-i]);
        while(i+dist<n)
        {
            if(i-dist<0)
                break;
            if(v[i-dist]!=v[i+dist])
                break;
            dist++;
        }
        dp[i]=dist;
        if(i+dist-1>y)
        {
            x=i-dist+1;
            y=i+dist-1;
        }
        kon+=dp[i];
    }
    fout<<kon;
    return 0;
}