Pagini recente » Cod sursa (job #1164960) | Cod sursa (job #1850532) | Cod sursa (job #1580975) | Cod sursa (job #1563561) | Cod sursa (job #2226215)
#include <fstream>
using namespace std;
ifstream cin("pscpld.in");
ofstream cout("pscpld.out");
int pi[2000008];
int main()
{
string s;
cin >> s;
string m = "&";
for (int i = 0; i < s.size(); ++i) {
m = m + s[i] + '&';
}
long long ans(0);
int p = 1;
for (int i = 1; i < m.size() - 1; ++i) {
if (p + pi[p] > i) {
int sim = 2 * p - i;
pi[i] = min(pi[sim], p + pi[p] - i);
}
while (pi[i] <= i && pi[i] + i < m.size() && m[pi[i] + i] == m[i - pi[i]]) {
++pi[i];
p = i;
}
ans += 1LL * pi[i] / 2;
}
cout << ans;
return 0;
}