Pagini recente » Cod sursa (job #210648) | Cod sursa (job #2486241) | Cod sursa (job #3208674) | Cod sursa (job #2801678) | Cod sursa (job #2260632)
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
char s[1000005],s1[2000005];
int p[2000005];
int main()
{
freopen("pscpld.in","r",stdin);
freopen("pscpld.out","w",stdout);
int n,i,j,k,m,l=1,lmax,r,c;
char ch;
s1[0]='@';
for(i=0;;++i)
{
scanf("%c",&ch);
if(ch=='\n')
break;
s1[l++]='#';
s1[l++]=ch;
}
s1[l++]='#';
s1[l++]='%';
s1[l]='\n';
r=c=0;
for(i=1; i<l-1; ++i)
{
k=c-(i-c);
if(r>i)
p[i]=min(r-i,p[k]);
while(s1[i+1+p[i]]==s1[i-1-p[i]])
p[i]++;
if(i+p[i]>r)
{
c=i;
r=i+p[i];
}
}
int sum=0;
for(i=1;i<l-1;++i)
if(p[i]>0)
{
if(i%2==0)
sum=sum+p[i]/2+1;
else
sum=sum+p[i]/2;
}
printf("%d",sum);
return 0;
}