Pagini recente » Cod sursa (job #1267523) | Cod sursa (job #905988) | Cod sursa (job #2539272) | Cod sursa (job #2412596) | Cod sursa (job #2411455)
#include <bits/stdc++.h>
using namespace std;
int main() {
#ifdef BLAT
freopen("input", "r", stdin);
#else
freopen("pscpld.in", "r", stdin);
freopen("pscpld.out", "w", stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
string aux;
cin >> aux;
string s = "#";
for(auto &x : aux) {
s += x;
s += '#';
}
long long ans = 0;
vector< int > manacher(s.size());
int l = 0, r = -1;
for(int i = 0; i < s.size(); ++i) {
int k = (i > r) ? 1 : min(r-i, manacher[l + r - i]);
while(i + k < s.size() && i - k >= 0 && s[i+k] == s[i-k]) ++k;
manacher[i] = k--;
if(i + k > r) {
r = i + k;
l = i - k;
}
ans += manacher[i]/2;
}
cout << ans << '\n';
return 0;
}