Pagini recente » Cod sursa (job #2935574) | Cod sursa (job #262769) | Cod sursa (job #527824) | Cod sursa (job #567959) | Cod sursa (job #911412)
Cod sursa(job #911412)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
FILE *f=fopen("pscpld.in","r"),*g=fopen("pscpld.out","w");
int x[2000005],i,j,k,centru;
char aux[1000005],s[2000005];
long long ras;
int main()
{
fgets(aux,1000005,f);
int n=strlen(aux);
for(i=0;i<n;i++)
{
s[strlen(s)]=' ';
s[strlen(s)]=aux[i];
}
int N=strlen(s);
for(i=1,j=0;i<N;i++)
{
if(i>j)
{
for(++j;i+i>=j&&s[j]==s[(2*i)-j]&&j<N;j++);
j--;
x[i]=j-i;
centru=i;
}
else
if(x[2*centru-i]<j-i)
x[i]=x[2*centru-i];
else
{
for(k=1;j+k<N&¢ru-k>=0&&s[j+k]==s[2*i-j-k];k++);
x[i]=j-i+k-1;
if(k>1)
{
j+=k-1;
centru=i;
}
}
ras+=x[i]/2;
}
fprintf(g,"%lld\n",ras+n-1);
return 0;
}