Pagini recente » Cod sursa (job #2284108) | Cod sursa (job #857175) | Cod sursa (job #294019) | Cod sursa (job #2262657) | Cod sursa (job #2848566)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
int n,l[2000005];
char s[1000005],a[2000005];
int main()
{
fin>>(s+1);
for(int i=1; s[i]!=0; i++)
{
a[++n]=s[i];
a[++n]='#';
}
a[n]=0;
n--;
int c=1,r=2,mir,dif;
long long ans=0;
for(int i=2; i<n; i++)
{
mir=2*c-i;
dif=r-i;
if(dif>0)
l[i]=min(l[mir],dif);
while(i+l[i]+1<=n && i-l[i]-1>=1 && a[i-l[i]-1]==a[i+l[i]+1])
l[i]++;
if(i+l[i]>r)
{
r=i+l[i];
c=i;
}
ans+=l[i]/2;
}
fout<<ans+strlen(s+1)<<"\n";
return 0;
}