Pagini recente » Cod sursa (job #2899220) | Cod sursa (job #2292293) | Cod sursa (job #2352248) | Cod sursa (job #95771) | Cod sursa (job #2589451)
#include <bits/stdc++.h>
using namespace std;
#define int long long
ifstream fin("numarare.in");
ofstream fout("numarare.out");
vector <int> manacher(vector <int> v, bool par)
{
int n = v.size();
vector <int> best(n - !par);
int l = 0;
int r = 0;
for(int i = 0; i < n - !par; ++i)
{
if(i + !par < r)
{
best[i] = min(best[l + r - i - !par], r - i);
}
int posl = i - best[i] + !par;
int posr = i + best[i];
while(posl - 1 >= 0 && posr + 1 < n && v[posl - 1] == v[posr + 1])
{
++posr;
--posl;
++best[i];
}
if(posr > r)
{
r = posr;
l = posl;
}
}
return best;
}
main()
{
int n;
fin >> n;
vector <int> v(n);
for(auto& i : v)
{
fin >> i;
}
for(int i = 0; i < n - 1; ++i)
v[i] -= v[i + 1];
v.pop_back();
vector <int> impar = manacher(v, 1);
int ans = 0;
for(auto i : impar)
ans += i + 1;
fout << ans << '\n';
}