Cod sursa(job #2639077)

Utilizator PopescuAndreiAlexandruPopescu Andrei Alexandru PopescuAndreiAlexandru Data 31 iulie 2020 12:10:59
Problema Numarare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
#include <cmath>

using namespace std;

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

const int DIM = 1000005;

int n,S[DIM],Sol[DIM];

long long ans=0;

void Read()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>S[i];
}

void Manacher()
{
    int l=0,r=-1;
    for(int i=1;i<=n;i++)
    {
        int k=1;
        if(i<=r)
            k=min(Sol[l+r-i+1],r-i+1);
        while(i-k-1>0 && i+k<=n && S[i-k-1]+S[i+k]==S[i-k]+S[i+k-1])
            k++;
        Sol[i]=k;
        k--;
        if(i+k>r)
        {
            l=i-k-1;
            r=i+k;
        }
    }
}

void Print()
{
    for(int i=2;i<=n;i++)
        ans+=Sol[i];
    fout<<ans<<'\n';    
}

int main()
{
    Read();
    Manacher();
    Print();
}