Pagini recente » Cod sursa (job #2236501) | Cod sursa (job #859506) | Cod sursa (job #165383) | Cod sursa (job #1227391) | Cod sursa (job #2462351)
#include <cstdio>
using namespace std;
int a[100005], v[100005];
int main()
{
freopen ("numarare.in","r",stdin);
freopen ("numarare.out","w",stdout);
int n, r, m;
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
{
scanf("%d", &a[i]);
}
for (int i = 1; i < n; ++i)
a[i] = a[i+1] - a[i];
n -= 1;
int ans = 0;
for (int i = 1; i <= n; ++i)
{
if (i>r)
{
int k=1;
while (a[i+k] == a[i-k] && i+k <= n && i-k >= 1)
++k;
--k;
r = i + k;
m = i;
ans += k + 1;
v[i] = k;
}
//printf("%d %d", m, r);
else
{
int k = min(v[2 * m-i], r-i);
while (a[i + k] == a[i - k] && i + k <= n && i - k >= 1)
++k;
--k;
if (i + k > r)
{
r = i + k;
m = i;
}
ans += k + 1;
v[i] = k;
}
}
printf("%d", ans);
return 0;
}