Pagini recente » Cod sursa (job #1061507) | Cod sursa (job #378978) | Cod sursa (job #502916) | Cod sursa (job #2601266) | Cod sursa (job #2461708)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int NMAX = 100005;
const int INF = 1000000000;
int v[NMAX];
int cnt[NMAX];
int main()
{
ifstream cin("numarare.in");
ofstream cout("numarare.out");
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> v[i];
v[i - 1] = v[i] - v[i - 1];
}
v[0] = -INF; v[n] = INF;
int mirror;
int R=0,C=0,sol=0;
for (int i = 1; i < n; i++)
{
mirror = 2 * C - i;
if (i <= R) cnt[i] = min(cnt[mirror], R - i);
else
cnt[i] = 1;
while (v[i + cnt[i]] == v[i - cnt[i]])
cnt[i]++;
if (cnt[i] + i - 1> R)
{
R = cnt[i] + i - 1;
C = i;
}
sol += cnt[i];
}
cout << sol << "\n";
return 0;
}