Pagini recente » Cod sursa (job #524059) | Cod sursa (job #1663753) | Cod sursa (job #1972479) | Clasament oni2007 | Cod sursa (job #2366838)
#include <bits/stdc++.h>
using namespace std;
string s;
void precalc(){
string cps = "$";
for(int i = 0; i < int(s.size()); ++i){
cps += s[i];
cps += '$';
}
s = cps;
}
int lps[1000005];
int n;
void calcLPS(){
int centre = 0, right = 0;
for(int i = 0; i < n; ++i){
int left = 2 * centre - i;
if(right > i)
lps[i] = min(lps[left], lps[right - i]);
while(s[i - lps[i] - 1] == s[i + lps[i] + 1])
lps[i]++;
if(lps[i] > lps[centre]){
centre = i;
right = i + lps[i];
}
}
}
int main()
{
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
getline(fin, s);
precalc();
n = int(s.size());
calcLPS();
long long sum = 0;
for(int i = 1; i < n; i += 2)
sum += lps[i];
fout << sum;
return 0;
}