Pagini recente » Cod sursa (job #2163409) | Cod sursa (job #1919273) | Cod sursa (job #1802839) | Cod sursa (job #2573044) | Cod sursa (job #2226218)
#include <fstream>
using namespace std;
ifstream cin("pscpld.in");
ofstream cout("pscpld.out");
int pi[2000008];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
char m[2000008];
int n(0);
m[n++] = '&';
while (cin >> m[n++]) {
m[n++] = '&';
}
long long ans(0);
int p = 1;
for (int i = 1; i < n - 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 < n && m[pi[i] + i] == m[i - pi[i]]) {
++pi[i];
p = i;
}
ans += 1LL * pi[i] / 2;
}
cout << ans;
return 0;
}