Pagini recente » Cod sursa (job #889792) | Cod sursa (job #404513) | Cod sursa (job #1846604) | Cod sursa (job #1803285) | Cod sursa (job #2454550)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
char a[1000005],v[2000005];
int n,i,j,k,nr,centru,dreapta,lg[2000005];
long long sol;
int main()
{
f>>(a+1);
n=strlen(a+1);
for(i=1;i<=n;i++)
{
nr++;
v[nr]='#';
nr++;
v[nr]=a[i];
}
nr++;
v[nr]='#';
for(i=1;i<=nr;i++)
{
if(i<dreapta)
{
lg[i]=min(lg[2*centru-i],dreapta-i);
}
j=i-lg[i]-1;
k=i+lg[i]+1;
while(j>=1 && k<=nr && v[j]==v[k])
{
lg[i]++;
j--;
k++;
}
sol+=(lg[i]+1)/2;
if(i+lg[i]>dreapta)
{
dreapta=i+lg[i];
centru=i;
}
}
g<<sol;
return 0;
}