Pagini recente » Cod sursa (job #1229701) | Cod sursa (job #2879408) | Cod sursa (job #668910) | Cod sursa (job #815235) | Cod sursa (job #2798608)
#include <fstream>
using namespace std;
const int N = 2e6 + 5;
char s[N];
int p[N], m;
void mnc() {
int i = 0, r = 1;
while (i < m) {
while (i - r >= 0 && i + r < m && s[i - r] == s[i + r])
++r;
p[i] = r;
int old_i = i, old_r = r;
++i;
while (i < old_i + old_r) {
int i_left = old_i - (i - old_i);
if (i_left - p[i_left] > old_i - old_r)
p[i++] = p[i_left];
else if (i_left - p[i_left] < old_i - old_r)
p[i++] = i_left - (old_i - old_r);
else {
r = p[i_left];
break;
}
}
}
}
int main() {
ifstream cin("pscpld.in");
ofstream cout("pscpld.out");
char c;
for (m = 1; cin >> s[m]; m += 2) {}
cin.close();
mnc();
long long ans = 0;
for (int i = 1; i < m; ++i)
ans += p[i] / 2;
cout << ans << "\n";
cout.close();
return 0;
}