Pagini recente » Cod sursa (job #2999408) | Cod sursa (job #2727978) | Cod sursa (job #2781217) | Cod sursa (job #1126458) | Cod sursa (job #2586298)
#include <bits/stdc++.h>
using namespace std;
const int N(2e6);
string sir, s;
int v[N + 5], n, c, r;
int64_t res;
int main()
{
std::ios::sync_with_stdio(false);
freopen("pscpld.in", "r", stdin);
freopen("pscpld.out", "w", stdout);
cin >> sir;
s += '#';
for (const char& ch: sir)
{
s += ch;
s += '#';
}
v[0] = 1;
n = static_cast<int>(s.size());
for (int i = 1; i < n; ++i)
{
int lg(0);
if (i <= r)
lg = min(v[2 * c - i], r - i + 1);
while (i - lg >= 0 && i + lg < n && s[i - lg] == s[i + lg])
++lg;
if (i + lg - 1 > r)
{
r = i + lg - 1;
c = i;
}
v[i] = lg;
if (i % 2 == 0)
res += lg / 2;
else res += (lg + 1) / 2;
}
cout << res;
return 0;
}