Pagini recente » Cod sursa (job #2431075) | Cod sursa (job #219796) | Cod sursa (job #584317) | Cod sursa (job #3149959) | Cod sursa (job #1517862)
#include <bits/stdc++.h>
#define INF (1 << 30)
#define LLINF (1LL << 62)
#define mod 666013
using namespace std;
int n, i, rgt, pal, sol;
int v[100005], l[100005];
int main()
{
freopen("numarare.in", "r", stdin);
freopen("numarare.out", "w", stdout);
scanf("%d%d", &n, &v[1]);
for(i = 2; i <= n; i++)
{
scanf("%d", &v[i]);
v[i - 1] = v[i] - v[i - 1];
}
n--;
rgt = pal = 0;
for(i = 1; i <= n; i++)
{
if(rgt >= i)
{
if(l[2 * pal - i] < rgt - i + 1)
{
l[i] = l[2 * pal - i];
sol += l[i];
continue;
}
else
l[i] = rgt - i + 1;
}
else
l[i] = 1;
while(v[i + l[i]] == v[i - l[i]] && i + l[i] <= n && i - l[i] >= 1)
l[i]++;
sol += l[i];
if(i + l[i] - 1 > rgt)
{
rgt = i + l[i] - 1;
pal = i;
}
}
printf("%d", sol);
return 0;
}