Pagini recente » Cod sursa (job #133415) | Cod sursa (job #2315155) | Cod sursa (job #1121235) | Cod sursa (job #2322317) | Cod sursa (job #1464119)
#include<stdio.h>
#include<algorithm>
#include<cstring>
#define maxn 1000005
using namespace std;
int n;
char aux[maxn],s[maxn<<1];
int p[maxn<<1];
long long sol;
void read()
{
scanf("%s",aux+1);
n=strlen(aux+1);
int nr=0;
for(int i=1;i<=n;i++)
s[++nr]='#',s[++nr]=aux[i];
s[++nr]='#';
n=nr;
}
int pal_len(int left,int right)
{
int nr=0;
for(;left>0 && right<=n && s[left]==s[right];left--,right++)
nr++;
return nr;
}
void solve()
{
int pos,C,R;
C=R=0;
for(int i=1;i<=n;i++)
{
if(i<=R)
{
pos=2*C-i;
p[i]=min(p[pos],R-i);
}
p[i]+=pal_len(i-p[i]-1,i+p[i]+1);
if(i+p[i]>=R) R=i+p[i],C=i;
if(i==1 || i==n) continue;
sol+=p[i]/2;
if(s[i]=='#' && p[i]%2==0) continue;
sol++;
}
}
int main()
{
freopen("pscpld.in","r",stdin);
freopen("pscpld.out","w",stdout);
read();
solve();
printf("%lld\n",sol);
fclose(stdin);
fclose(stdout);
return 0;
}