Pagini recente » Cod sursa (job #1011820) | Cod sursa (job #1847403) | Cod sursa (job #1788061) | Cod sursa (job #2666842) | Cod sursa (job #1759036)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("numarare.in");
ofstream cout("numarare.out");
const int MAXN = 100000;
int v[1 + MAXN], s[1 + MAXN], manacher[1 + MAXN];
int main() {
int n;
int answer = 0;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> v[i];
for (int i = 1; i < n; i++)
s[i] = v[i + 1] - v[i];
int right = 0, center = 0;
for (int i = 1; i < n; i++) {
if (right >= i)
manacher[i] = min(right - i, manacher[2 * center - i]);
while (i - manacher[i] - 1 > 0 && i + manacher[i] + 1 < n && s[i - manacher[i] - 1] == s[i + manacher[i] + 1])
manacher[i]++;
if (i + manacher[i] > right) {
right = i + manacher[i];
center = i;
}
answer = answer + manacher[i] + 1;
}
cout << answer << "\n";
return 0;
}