Pagini recente » Cod sursa (job #1543448) | Cod sursa (job #714880) | Cod sursa (job #2149449) | Cod sursa (job #2487206) | Cod sursa (job #2673340)
#include <bits/stdc++.h>
using namespace std;
ifstream f("numarare.in");
ofstream g("numarare.out");
int s[100005], d[100005], n, x, y;
long long rez;
void Read()
{
f>>n;
f>>x;
for(int i = 1;i < n;++i)
f>>y, s[i] = abs(x - y), x = y;
}
void Solve()
{
int l = 0, r = -1, k;
for(int i = 1;i < n;++i)
{
k = (i > r) ? 1 : min(d[l + r - i], r - i + 1); //ca sa porneasta de la pozitia viitoare
while(1 <= i - k && i + k <= n && s[i - k] == s[i + k])
++k;
d[i] = k;
--k; //ca a ajuns la o pozitie care nu e buna
if(i + k > r)
{
l = i - k;
r = i + k;
}
}
for(int i = 1;i < n;++i)
rez += d[i];
g<<rez;
}
int main()
{
Read();
Solve();
return 0;
}