제출 #1300471

#제출 시각아이디문제언어결과실행 시간메모리
1300471uranhishigPalindromic Partitions (CEOI17_palindromic)C++20
0 / 100
0 ms332 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define all(a) (a).begin(),(a).end()
#define rep(i, n) for(int i = 0; i < (n); i++)
const int mod = 1000000005;


int h1 = 31;
int h2 = 43;

signed main(){
	int t;
	cin >> t;
	while(t--){
		string s;
		cin >> s;
		int n = s.size();
		string l,r;
		int s1 = 0;
		int s2 = 0;
		int ss1 = 0;
		int ss2 = 0;
		int m1[n + 1];
		int m2[n + 1];
		m1[0] = 1;
		m2[0] = 1;
		int x = 0;
		for (int i = 1; i <= n; i++) {
			m1[i] =( m1[i-1]*31+mod)%mod;
			m2[i] = ( m2[i-1]*43+mod)%mod;
		}
		int ans = 0;
		for (int i = 0; i < n/2; i++) {
			s1 = (s1*31 + (s[i]-'a'))%mod;
			s2 = (m1[x]*(s[n-1-i]-'a') + s2)%mod;





		 	ss1 = (ss1*43 + (s[i]-'a'))%mod;
			ss2 = (m2[x]*(s[n-1-i]-'a') + ss2)%mod;
			x++;
			if(s1 == s2 and ss1 == ss2){
				ans+=2;
				x=0;
				s1 = 0;
				s2 = 0;
				ss1 = 0;
				ss2 = 0;
			}
		}
		if((s1!=0 and s2!=0 and ss1!=0 and ss2!= 0)||n%2 ){
			ans++;
		}
		cout << ans << endl;
	}
	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...