Pagini recente » Cod sursa (job #2222186) | Cod sursa (job #551250) | Cod sursa (job #2442143) | Cod sursa (job #195264) | Cod sursa (job #2798504)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
char s[N];
int d1[N], d2[N];
int main()
{
freopen("pscpld.in", "r", stdin);
freopen("pscpld.out", "w", stdout);
int n, l = 1, r = 0, ans = 0;
cin >> s + 1;
n = strlen(s + 1);
for (int i = 1; i <= n; i++)
{
int lg = 1;
if (i < r)
lg = min(d1[l + r - i], r - i + 1);
while (i + lg <= n && lg < i && s[i - lg] == s[i + lg])
lg++;
ans += lg;
d1[i] = lg--;
if (r < i + lg)
l = i - lg, r = i + lg;
}
l = 1, r = 0;
for (int i = 1; i <= n; i++)
{
int lg = 0;
if (i < r)
lg = min(d2[l + r - i + 1], r - i + 1);
while (i + lg <= n && lg + 1 < i && s[i - lg - 1] == s[i + lg])
lg++;
ans += lg;
d2[i] = lg--;
if (r < i + lg && lg)
l = i - lg - 1, r = i + lg;
}
cout << ans;
return 0;
}