Pagini recente » Cod sursa (job #1820295) | Cod sursa (job #258608) | Cod sursa (job #1804957) | Cod sursa (job #1316214) | Cod sursa (job #2909272)
#include <bits/stdc++.h>
#define N 1000005
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
int n,d[2*N],ct;
string s;
void ManacherImpar(string s)
{
n=s.size();
s="$"+s+"^";
int l=1,r=1;
for(int i=1;i<=n;i++)
{
d[i]=max(0,min(r-i,d[l+(r-i)]));
while(s[i-d[i]]==s[i+d[i]]) d[i]++;
if(i+d[i]>r) l=i-d[i],r=i+d[i];
}
}
void Manacher(string s)
{
string t;
for(auto c:s) t+=string("#")+c;
ManacherImpar(t+"#");
}
int main()
{
fin>>s;
Manacher(s);
for(int i=1;i<=n;i+=2) ct+=(d[i]-1)/2;
for(int i=2;i<=n;i+=2) ct+=d[i]/2;
fout<<ct;
return 0;
}