Pagini recente » Cod sursa (job #994962) | Cod sursa (job #1131958) | Cod sursa (job #659691) | Cod sursa (job #1219811) | Cod sursa (job #2181412)
#include <cstdio>
#include <cctype>
using namespace std;
char v[2000005];
int rez[2000005];
/// TONI BO$$ was here
/// #MLC
int main()
{
int n,fl,i,c,r,j,a,b;
long long sum=0;
freopen("pscpld.in","r",stdin);
freopen("pscpld.out","w",stdout);
n=0;
v[0]='$';
do
{
fl=1;
n++;
v[n]=getchar();
if(isalpha(v[n]))
v[++n]='$';
else
fl=0;
}while(fl);
c=1;
r=2;
n--;
rez[1]=1;
for(j=2; j<n; j++){
i=2*c-j;
if(j>=r){
a=j-1;
b=j+1;
while(a>=0 && b<=n){
if(v[a]==v[b])
a--,b++,rez[j]++;
else
break;}
c=j;
r=c+rez[c];
continue ;
}
if(rez[i]<r-j || r==n){
rez[j]=rez[i];
continue ;
}
rez[j]=r-j;
a=j-rez[j]-1;
b=r+1;
while(a>=0 && b<=n){
if(v[a]==v[b])
a--,b++,rez[j]++;
else
break;}
if(r<j+rez[j]){
c=j;
r=c+rez[c];
}
}
for(i=1; i<n; i++)
sum+=(rez[i]+1)/2;
printf("%lld\n",sum);
return 0;
}