Pagini recente » Cod sursa (job #1344531) | Cod sursa (job #482994) | Cod sursa (job #1381196) | Cod sursa (job #1681414) | Cod sursa (job #1941774)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 1e6+5;
int n, id, i, l[2*Nmax];
char b[Nmax], a[2*Nmax];
long long ans=0;
int main()
{
freopen("pscpld.in", "r", stdin);
freopen("pscpld.out", "w", stdout);
scanf("%s\n", b+1);
n = strlen(b+1);
for(i=1; i<=n; ++i)
a[2*i-1] = '#', a[2*i] = b[i];
a[n = 2*n+1] = '#';
id = 0;
for(i=1; i<=n; ++i)
{
if(id + l[id] > i) l[i] = min(l[2*id-i], id + l[id] - i);
else l[i] = 1;
while(i > l[i] && a[i-l[i]] == a[i+l[i]]) ++l[i];
ans += l[i] / 2;
if(i + l[i] > id + l[id]) id = i;
}
printf("%lld\n", ans);
return 0;
}