Pagini recente » Cod sursa (job #1261630) | Cod sursa (job #949851) | Cod sursa (job #225881) | Cod sursa (job #2232261)
#include <fstream>
//#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false), cin.tie(0);
ifstream cin("pscpld.in");
ofstream cout("pscpld.out");
const int N = 2e6 + 7;
string a;
string b;
int LPS[N];
void Manacher()
{
for(int i = 0; i < a.size(); i++)
b.push_back('#'), b.push_back(a[i]);
b.push_back('#');
int l = 0, r = -1;
for(int i = 0; i < b.size(); i++)
{
int k = (i > r ? 0 : min (LPS[l + r - i], r - i));
while(i + k < b.size() && i - k >= 0 && b[i + k] == b[i - k])
k++;
LPS[i] = k--;
if(i + k > r)
l = i - k, r = i + k;
}
}
main()
{
cin >> a;
Manacher();
long long ans = a.size() * 1LL;
for(int i = 0; i < b. size(); i++)
ans += (LPS[i] - 1) / 2LL;
cout << ans;
}