Pagini recente » Cod sursa (job #2672990) | Cod sursa (job #2701524) | Cod sursa (job #1213858) | Cod sursa (job #282370) | Cod sursa (job #2715329)
#include <bits/stdc++.h>
#define inf (1 << 30)
#define NMAX 100005
using namespace std;
ifstream fin("numarare.in");
ofstream fout("numarare.out");
int lps[NMAX], v[NMAX], sum[NMAX];
int main()
{
int n;
fin >> n;
for(int i = 1; i <= n; ++i)
fin >> v[i];
for(int i = 1; i < n; ++i)
sum[i] = v[i + 1] - v[i];
int k = 0, left = 1, right = -1, rez = 0;
for(int i = 1; i < n; i ++){
if(i > right)
k = 1;
else k = min(right - i + 1, lps[left + right - i]);
while(i - k >= 1 && i + k < n && sum[i + k] == sum[i - k])
k ++;
lps[i] = k--;
rez += lps[i];
if(i + k > right){
right = i + k;
left = i - k;
}
}
fout << rez << '\n';
return 0;
}