Pagini recente » Cod sursa (job #1615852) | Cod sursa (job #2314896) | Cod sursa (job #359336) | Cod sursa (job #1400716) | Cod sursa (job #1063065)
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;
ifstream fi("pscpld.in");
ofstream fo("pscpld.out");
char C[2000020],A[1000005];
int i,k;
int n;
int P[2000020],id=1,mx=2;
long long rez;
int main()
{
C[0]='$';
C[1]='#';
i=1;
fi>>A;
n=strlen(A);
k=2;
for(i=0;i<n;i++)
{
C[k++]=A[i];
C[k++]='#';
}
C[k]='\0';
P[1]=1;
n=strlen(C);
for(i=2;i<n;i++)
{
P[i]=mx>i ? min(P[2*id-i],mx-i):1;
while(C[i+P[i]]==C[i-P[i]])
P[i]++;
if(P[i]+i>mx)
{
mx=P[i]+i;
id=i;
}
}
for(i=1;i<n;i++)
{
if(C[i]=='#')
{
rez+=(P[i]-1)/2;
}
else
rez+=P[i]/2;
}
fo<<rez<<'\n';
fi.close();
fo.close();
return 0;
}