Pagini recente » Cod sursa (job #2819145) | Cod sursa (job #2891438) | Cod sursa (job #2832889) | Cod sursa (job #2449948) | Cod sursa (job #2460869)
#include <fstream>
#include <iostream>
#include <string>
#define NMAX 1000000
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
long long v[NMAX+10], sol;
string s, s1;
int main()
{
f >> s1;
int n1 = s1.size();
s = '$';
for(int i=0; i<n1; i++) s = s + '#' + s1[i];
s = s + '#' + '@';
int n = s.size();
long long C=0, R=0;
for(int i=1; i<n-1; i++)
{ long long ogl = 2*C - i;
if(i <= R) v[i] = min(R-i, v[ogl]);
while(s[i+v[i]+1] == s[i-v[i]-1]) v[i]++;
if(v[i] + i > R)
{ C = i;
R = v[i] + i;
}
}
for(int i=0; i<n; i++) sol = sol + v[i]/2;
g << sol + n1 << '\n';
return 0;
}