Pagini recente » Cod sursa (job #1627609) | Cod sursa (job #269862) | Cod sursa (job #268605) | Cod sursa (job #1823101) | Cod sursa (job #2798896)
#include <bits/stdc++.h>
using namespace std;
ifstream in("numarare.in");
ofstream out("numarare.out");
using ll = long long;
int main() {
in.tie(NULL);
out.tie(NULL);
ios_base::sync_with_stdio(false);
int n; in >> n;
vector<int> v(n);
for (int &x : v)
in >> x;
vector<int> pal(n);
int l = -1, r = -1;
ll ans = 0;
for (int i = 1; i < n; i++) {
int sum;
if (i >= r) {
pal[i] = 1;
sum = v[i] + v[i - 1];
} else {
pal[i] = min(r - i + 1, pal[l + r - i + 1]);
sum = v[i] + v[i - 1];
}
// cerr << sum << " " << pal[i] << "\n";
while (i - 1 - pal[i] >= 0 && i + pal[i] < n &&
sum == v[i + pal[i] - 1] + v[i - pal[i]])
pal[i]++;
pal[i]--;
if (pal[i] + i > r) {
r = pal[i] + i;
l = i - pal[i] - 1;
}
// cerr << pal[i] << " ";
ans += (pal[i] + 1) / 2 + 1;
}
out << ans << "\n";
return 0;
}