Pagini recente » Cod sursa (job #3214041) | Cod sursa (job #583623) | Cod sursa (job #3183870) | Cod sursa (job #139237) | Cod sursa (job #2957202)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("pscpld.in");
ofstream fout ("pscpld.out");
const int NMAX=2e6+5;
int dp[NMAX];
string v;
string s;
int main()
{
int n,i,j,x=0,y=0,dist=0;
long long kon=0;
fin>>v;
n=v.size();
s.push_back('*');
for(i=0;i<n;i++)
{
s.push_back(v[i]);
s.push_back('*');
}
n=s.size();
for(i=0;i<n;i++)
{
if(i>y)
dist=1;
if(i<=y)
dist=min(y-i+1,dp[x+y-i]);
while(i+dist<n)
{
if(i-dist<0)
break;
if(s[i-dist]!=s[i+dist])
break;
dist++;
}
dp[i]=dist;
if(i+dist-1>y)
{
x=i-dist+1;
y=i+dist-1;
}
}
for(i=0;i<n;i++)
kon+=dp[i]/2;
fout<<kon;
return 0;
}