제출 #1333443

#제출 시각아이디문제언어결과실행 시간메모리
1333443miniobPalindromic Partitions (CEOI17_palindromic)C++20
0 / 100
0 ms344 KiB
#include <bits/stdc++.h>
using namespace std;

long long p1 = 2137;
long long m1 = 1000000007;
long long p2 = 997;
long long m2 = 1000000009;
long long pref1[1000007];
long long pref2[1000007];
long long suf1[1000007];
long long suf2[1000007];
long long pott1[1000007];
long long pott2[1000007];

void solve()
{
	string s;
	cin >> s;
	int n = s.size();
	long long pot1 = p1;
	long long pot2 = p2;
	pott1[0] = 1;
	pott2[0] = 1;
	for(int i = 1; i <= n; i++)
	{
		pott1[i] = pott1[i - 1] * p1;
		pott1[i] %= m1;
		pott2[i] = pott2[i - 1] * p2;
		pott2[i] %= m2;
	}
	for(int i = 1; i <= n; i++)
	{
		pref1[i] = pref1[i - 1] + pot1 * (long long)s[i - 1];
		pref1[i] %= m1;
		pot1 *= p1;
		pot1 %= m1;
		pref2[i] = pref2[i - 1] + pot2 * (long long)s[i - 1];
		pref2[i] %= m2;
		pot2 *= p2;
		pot2 %= m2;
	}
	suf1[n + 1] = 0;
	suf2[n + 1] = 0;
	for(int i = n; i >= 1; i--)
	{
		suf1[i] = p1 * suf1[i + 1] + p1 * (long long)s[i - 1];
		suf1[i] %= m1;
		suf2[i] = p2 * suf2[i + 1] + p2 * (long long)s[i - 1];
		suf2[i] %= m2;
	}
	int odp = 0;
	int lewo = 0, prawo = n + 1;
	//cout << (pref1[2] - pref1[1] + m1) % m1 << endl;
	//cout << (pott1[1] * (suf1[5 - 1] - ((pott1[1] * suf1[5]) % m1) + m1)) % m1 << endl;
	while(lewo < prawo)
	{
		int cur = 1;
		while((pref1[lewo + cur] - pref1[lewo] + m1) % m1 != (pott1[lewo] * (suf1[prawo - cur] - ((pott1[cur] * suf1[prawo]) % m1) + m1)) % m1 || (pref2[lewo + cur] - pref2[lewo] + m2) % m2 != (pott2[lewo] * (suf2[prawo - cur] - ((pott2[cur] * suf2[prawo]) % m2) + m2)) % m2)
		{
			cur++;
		}
		//cout << cur << endl;
		lewo += cur;
		prawo -= cur;
		if(lewo < prawo)
		{
			odp += 2;
		}
		else
		{
			odp++;
		}
	}
	cout << odp << endl;
}

int main() 
{
	int t;
	cin >> t;
	while(t--)
	{
		solve();
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...