Pagini recente » Cod sursa (job #1778602) | Cod sursa (job #1586177) | Cod sursa (job #1027557) | Cod sursa (job #491399) | Cod sursa (job #3217524)
#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e6;
int len[5 + 2 * nmax];
int main() {
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
string s;
fin >> s;
string t = "#";
for (int i = 0; i < (int)s.size(); i++) {
t.push_back(s[i]);
t += "#";
}
s = t;
int n = s.size() - 1;
long long ans = 0;
int maxim = 0, posmax = 0;
for (int i = 1; i <= n; i++) {
int dist = 2 * posmax - i;
if (maxim > dist) {
if (dist >= 0)
len[i] = min(len[dist], maxim - i);
else
len[i] = maxim - i;
}
while (0 <= i - len[i] - 1 && i + len[i] + 1 <= n && s[i - len[i] - 1] == s[i + len[i] + 1])
len[i]++;
ans += (len[i] + i % 2) / 2;
if (i + len[i] > maxim) {
maxim = i + len[i];
posmax = i;
}
}
fout << ans << '\n';
return 0;
}