Pagini recente » Cod sursa (job #3212958) | Cod sursa (job #2971680) | Cod sursa (job #3244574) | Cod sursa (job #226938) | Cod sursa (job #2639077)
#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();
}