Pagini recente » Cod sursa (job #1989718) | Cod sursa (job #659707) | Cod sursa (job #2906119) | Cod sursa (job #3192358) | Cod sursa (job #2313908)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
#include <cstring>
using namespace std;
int main() {
ifstream in ( "pscpld.in" );
ofstream out ( "pscpld.out" );
string s;
in >> s;
vector<char> v ( s.size() * 2 + 1 );
int ii = 0;
v[ii ++] = '$';
for ( auto it : s ) {
v[ii ++] = it;
v[ii ++] = '$';
}
vector<int> p ( v.size(), 0 );
int r = 0, pos = 0;
p[0] = 1;
long long ans = 0;
for ( int i = 1; i < v.size(); i ++ ) {
if ( r > i )
p[i] = min ( r - i + 1, p[2 * pos - i] );
else
p[i] = 1;
int j = i - p[i], k = i + p[i];
while ( j >= 0 && k < v.size() && v[j] == v[k] ) {
j --;
k ++;
p[i] ++;
}
if ( i + p[i] - 1 > r ) {
r = i + p[i] - 1;
pos = i;
}
ans += ( p[i] / 2 );
}
out << ans;
return 0;
}