Pagini recente » Cod sursa (job #2984205) | Cod sursa (job #190557) | Cod sursa (job #2766593) | Cod sursa (job #3130023) | Cod sursa (job #1003510)
#include<stdio.h>
#include<string.h>
char s[2000005];
unsigned d[2000005];
int main()
{
freopen("pscpld.in","r",stdin);
freopen("pscpld.out","w",stdout);
unsigned n,i,j,p,m=0;
gets(s+1);
n=strlen(s+1);
for(i=n;i>=1;i--)
{
s[2*i]=s[i];
s[2*i+1]='*';
}
n=2*n+1;
s[1]='*';
p=0;
for(i=1;i<=n;i++)
{
if(i>d[p]+p)
{
for(j=1;j<i && s[i+j]==s[i-j] && i-j>0 && i+j<=n;j++);
p=i;
d[i]=j;
}
else
{
if(2*p-i-d[2*p-i]>p-d[p])
d[i]=d[2*p-i];
else
d[i]=p+d[p]-i;
if(i+d[i]==p+d[p])
{
for(;s[i-d[i]]==s[i+d[i]] && i+d[i]<=n && i-d[i]>0;d[i]++);
p=i;
}
}
m=m+d[i]/2;
}
printf("%u ",m);
return 0;
}