Pagini recente » Cod sursa (job #2274700) | Cod sursa (job #1433952) | Cod sursa (job #1869137) | Cod sursa (job #2180371) | Cod sursa (job #1684361)
#include <fstream>
#define LL long long
using namespace std;
const int MaxLng = 2000005;
ifstream cin("pscpld.in");
ofstream cout("pscpld.out");
string str;
int lng[MaxLng];
int n, last;
LL ans;
int main() {
cin >> str;
n = 2 * str.size();
str = '0' + str;
for(int i = 1; i <= n; ++i) {
if(last + lng[last] > i) {
lng[i] = min(lng[2 * last - i], last + lng[last] - i);
}
else {
lng[i] = (i % 2 == 0);
}
while(i + lng[i] < n and i - lng[i] > 0 and str[(i + lng[i] + 1) / 2] == str[(i - lng[i] - 1) / 2]) {
lng[i] += 2;
}
if(i + lng[i] > last + lng[last]) {
last = i;
}
ans += (lng[i] + 1) / 2;
}
cout << ans << '\n';
return 0;
}