Cod sursa(job #2232026)

Utilizator DenisacheDenis Ehorovici Denisache Data 17 august 2018 00:07:40
Problema PScPld Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.56 kb
#include <fstream>
#include <cstring>
#include <algorithm>

using namespace std;

int d[2000008];
char s[2000008];

int main() {
	ifstream cin("pscpld.in");
	ofstream cout("pscpld.out");
	
	int n = 0;
	s[n++] = '+';
	while (cin >> s[n++])
		s[n++] = '+';

	long long res = 0;
	int r = 1;

	for (int i = 1; i < n - 1; ++i) {
		if (r + d[r] > i)
			d[i] = min(d[2 * r - i], r + d[r] - i);

		while (0 <= i - d[i] && i + d[i] < n && s[i - d[i]] == s[i + d[i]]) {
			++d[i];
			r = i;
		}

		res += 1LL * d[i] / 2;
	}

	cout << res;

	return 0;
}