Cod sursa(job #2366854)

Utilizator LucaSeriSeritan Luca LucaSeri Data 4 martie 2019 22:29:49
Problema PScPld Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <bits/stdc++.h>
 
using namespace std;


const int MAXN = 2e6 + 10;

int dp[MAXN];
int main() {

	#ifdef BLAT
		freopen("input", "r", stdin);
		#define f cin
		#define g cout
	#else
		ifstream f("pscpld.in");
		ofstream g("pscpld.out");
	#endif
	
	string m;
	f >> m;

	string s = "#";
	for(auto &x : m) s = s + x + '#';

	long long ans = 0;

	for(int i = 0, l = 0, r = -1; i < s.size(); ++i) {
		int k = (i > r) ? 1 : min(r - i, dp[l + r - i]);
		while(i - k >= 0 && i + k < s.size() && s[i-k] == s[i+k]) ++k;

		dp[i] = k--;

		cout << dp[i] << '\n';
		ans += (dp[i])/2;

		if(i + k > r) {
			r = i + k;
			l = i - k;
		}
	}

	g << ans << '\n';
    return 0;
}