Pagini recente » Cod sursa (job #728105) | Cod sursa (job #2139291) | Cod sursa (job #2312240) | Cod sursa (job #2668163) | Cod sursa (job #2502895)
#include <bits/stdc++.h>
using namespace std;
long long mij,ans,n,st,dr,k;
long long v[4000005];
char str[4000005],str2[4000001];
int main()
{
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
fin.getline(str2,1000001);
n=strlen(str2);
n*=2;
for(int i=0; i<=n; i+=2)
{
str[i]='$';
str[i+1]=str2[k++];
}
for(int i=1; i<=2*n; ++i)
{
int j,j2;
if(i<=dr)
{
mij=st+dr-i;
v[i]=min(v[mij],mij-st+1);
j=i+v[i];
j2=i-v[i];
while(j2>=0 && j<=n && str[j]==str[j2])
{
j++;
j2--;
v[i]++;
}
if(dr<i+v[i]-1)
{
dr=i+v[i]-1;
st=i-v[i]+1;
}
}
else
{
j=i;
j2=i;
while(j2>=0 && j<=n && str[j]==str[j2])
{
j++;
j2--;
v[i]++;
}
dr=i+v[i]-1;
st=i-v[i]+1;
}
ans+=v[i]/2;
}
fout<<ans;
return 0;
}