Pagini recente » Cod sursa (job #2203483) | Cod sursa (job #182339) | Cod sursa (job #2099634) | Cod sursa (job #1418336) | Cod sursa (job #1345550)
#include<stdio.h>
int sol,i,j,p[1000005*2],n,nr;
char s[1000004],c;
int main()
{
freopen("pscpld.in","r",stdin);
freopen("pscpld.out","w",stdout);
while(scanf("%c",&c)!=EOF)
{
s[nr]='#';
nr++;
s[nr]=c;
}
nr++;
s[nr]='#';
n=nr;
for(i=1;i<n;i++)
{
if(j+p[j]<i)
{
while(s[i+p[i]+1]==s[i-p[i]-1]&&p[i]<i)
p[i]++;
}
else
{
if(i+p[2*j-i]<j+p[j])
{
p[i]=p[2*j-i];
}
else
{
p[i]=p[2*j-i];
while(s[i+p[i]+1]==s[i-p[i]-1]&&p[i]<i)
p[i]++;
}
}
if(i+p[i]>j)
j=i;
sol+=(p[i]+1)/2;
}
printf("%d",sol);
return 0;
}