Submission #1285930

#TimeUsernameProblemLanguageResultExecution timeMemory
1285930Jawad_Akbar_JJPalindromic Partitions (CEOI17_palindromic)C++20
100 / 100
140 ms18948 KiB
#include <iostream>

using namespace std;
#define int long long
int hsh[1<<20], pw[1<<20], mod = 998244353;
int get(int l, int r){
	return (hsh[r] - hsh[l - 1] * pw[r - l + 1] % mod + mod) % mod;
}

void solve(){
	string s;
	cin>>s;
	int n = s.size();

	for (int i=pw[0]=1;i<=n;i++){
		hsh[i] = (hsh[i-1] * 256 + s[i - 1]) % mod;
		pw[i] = pw[i-1] * 256 % mod;
	}

	int L = 1, R = n, Ans = 0, t = 1;
	while (t){
		t = 0;
		for (int i=1;i * 2 <= R - L + 1 and !t;i++){
			if (get(L, L + i - 1) == get(R - i + 1, R))
				t = 1, Ans += 2, L += i, R -= i;
		}
		if (!t and R >= L)
			Ans++;
	}
	cout<<Ans<<'\n';
}

signed main(){
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int t;
	cin>>t;
	while (t--)
		solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...