Pagini recente » Cod sursa (job #1636895) | Cod sursa (job #1083160) | Cod sursa (job #923146) | Cod sursa (job #1957073) | Cod sursa (job #159242)
Cod sursa(job #159242)
#include<stdio.h>
#define Nm (1<<20)
#define min(a,b) ((a)<(b)?(a):(b))
char S[Nm];
int A[Nm<<1];
long long ans;
void read()
{
freopen("pscpld.in","r",stdin);
gets(S);
}
void solve()
{
int i,j;
for(i=0;S[i];++i)
{
for(j=A[i<<1]+1;i-A[i<<1]>0 && S[i-A[i<<1]-1]==S[i+A[i<<1]+1];++A[i<<1]);
for(;j<=A[i<<1];++j)
{
A[i+j<<1]=min(A[i-j<<1],A[i<<1]-j);
A[(i+j<<1)-1]=min(A[i-j<<1|1],A[i<<1]-j+1);
}
ans+=j;
for(j=A[i<<1|1]+1;i+1-A[i<<1|1]>0 && S[i-A[i<<1|1]]==S[i+A[i<<1|1]+1];++A[i<<1|1]);
for(;j<=A[i<<1|1];++j)
{
A[i+j<<1]=min(A[i+1-j<<1],A[i<<1|1]-j);
A[(i+j<<1)-1]=min(A[i+1-j<<1|1],A[i<<1|1]-j+1);
}
ans+=j-1;
}
}
void write()
{
freopen("pscpld.out","w",stdout);
printf("%lld\n",ans);
}
int main()
{
read();
solve();
write();
return 0;
}