Pagini recente » Cod sursa (job #2979823) | Cod sursa (job #2811133) | Rating Throw Away (throwawaycont) | Cod sursa (job #2925452) | Cod sursa (job #3003858)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("pscpld.in");
ofstream fout ("pscpld.out");
const int NMAX=2e6+5;
int dp[NMAX];
string a;
string s;
int main()
{
int n,i,j,x=0,y=0,dist=0;
long long kon=0;
fin>>a;
n=a.size();
s.push_back('*');
for(i=0;i<n;i++)
{
s.push_back(a[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;
}