Pagini recente » Cod sursa (job #1756128) | Cod sursa (job #1215606) | Cod sursa (job #1410529) | Cod sursa (job #1274475) | Cod sursa (job #2721873)
#include <bits/stdc++.h>
#define MAX 1000000
#define MIN -1000000
using namespace std;
ifstream fin("numarare.in");
ofstream fout("numarare.out");
int N;
int v[100005], a[100005];
int Pal[100005];
int main()
{
fin >> N;
for(int i = 1; i <= N; i++)
fin >> v[i];
for(int i = 1; i <= N - 1; i++)
a[i] = v[i + 1] - v[i];
a[N] = MAX;
a[0] = MIN;
int C, R;
C = R = 0;
for(int i = 1; i <= N - 1; i++)
{
int mirr = 2 * C - i;
if(i < R)
Pal[i] = min(Pal[mirr], R - i);
while(a[i - Pal[i] - 1] == a[i + Pal[i] + 1])
Pal[i]++;
if(i + Pal[i] > R)
{
C = i;
R = i + Pal[i];
}
}
long long ans = 0;
for(int i = 1; i <= N - 1; i++)
ans += (long long)(Pal[i] + 1);
fout << ans;
return 0;
}