Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- vector<int> z_function(string s) {
- int n = s.size();
- vector<int> z(n);
- int l = 0, r = 0;
- for(int i = 1; i < n; i++) {
- if(i < r) {
- z[i] = min(r - i, z[i - l]);
- }
- while(i + z[i] < n && s[z[i]] == s[i + z[i]]) {
- z[i]++;
- }
- if(i + z[i] > r) {
- l = i;
- r = i + z[i];
- }
- }
- return z;
- }
- void solve() {
- string s, t; cin >> s;
- int n = s.size();
- if(n & 1) {
- cout << "0\n"; return;
- }
- t = s;
- reverse(t.begin(), t.end()) ;
- auto z1 = z_function(s);
- auto z2 = z_function(t);
- int ans = 0 ;
- for (int sz1 = 0; sz1 <= n / 2; sz1++ ) {
- int sz2 = (n / 2) - sz1 ;
- if(z1[sz1] >= sz1 && z2[sz2] >= sz2)
- ans++ ;
- }
- cout << ans << endl;
- }
- int main() {
- // your code goes here
- int t; cin >> t;
- while(t--) solve();
- }
Advertisement
Add Comment
Please, Sign In to add comment