Cod sursa(job #2232261)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 18 august 2018 12:13:48
Problema PScPld Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#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;
}