Pagini recente » Cod sursa (job #2963917) | Cod sursa (job #2534585) | Cod sursa (job #1605714) | Cod sursa (job #2058682) | Cod sursa (job #2575541)
#include <iostream>
#include <fstream>
#define NMAX 1000000
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
int v[NMAX+10], sol;
string s, t;
int main()
{
f >> s;
t = '&';
int m = s.size();
for(int i=0; i<m; i++) t = t + '#' + s[i];
t = t + '#' + '%';
int C = 0, R = 0, n = t.size();
for(int i=1; i<n-1; i++)
{ int ogl = 2 * C - i;
if(i <= R) v[i] = min(R-i, v[ogl]);
while(t[i+v[i]+1] == t[i-v[i]-1]) v[i]++;
if(i + v[i] > R)
{ C = i;
R = v[i] + i;
}
}
for(int i=0; i<n; i++)
if(v[i] > 0) sol = sol + (v[i] - 1) / 2 + 1;
g << sol << '\n';
return 0;
}