Pagini recente » Cod sursa (job #2000875) | Cod sursa (job #302197) | Cod sursa (job #1550589) | Cod sursa (job #1433570) | Cod sursa (job #2354421)
#include <bits/stdc++.h>
#define Nmax 100005
#define ll long long
using namespace std;
ifstream fin("numarare.in");
ofstream fout("numarare.out");
int N;
int A[Nmax], Dif[Nmax], D[Nmax];
int main()
{
fin >> N;
for(int i = 1; i <= N; i++)
fin >> A[i];
if(N == 1)
{
fout << "0\n";
return 0;
}
for(int i = 1; i < N; i++)
Dif[i] = A[i + 1] - A[i];
int le = 1, ri = 1, len = 0;
D[1] = 0;
ll ans = 1;
for(int i = 2; i < N; i++)
{
if(i > ri)
len = 0;
else
len = min(ri - i, D[le + ri - i]);
while(i - len >= 1 && i + len < N && Dif[i - len] == Dif[i + len])
len++;
ans += len;
len--;
D[i] = len;
if(i + len > ri)
{
ri = i + len;
le = i - len;
}
}
fout << ans << "\n";
return 0;
}