Submission #1170202

#TimeUsernameProblemLanguageResultExecution timeMemory
1170202nguyenkhangninh99Palindromic Partitions (CEOI17_palindromic)C++17
100 / 100
98 ms19064 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

const int maxn = 1e6 + 5, mod = 998244353, base = 727;
int p[maxn], f[maxn];

int get(int l, int r){
    return ((f[r] - f[l - 1] * p[r - l + 1]) % mod + mod) % mod;
}

void solve(){
    string s; cin >> s;
    int n = s.size();
    
    s = '#' + s;
    
    for(int i = 1; i <= n; i++) f[i] = (f[i - 1] * base + s[i] - 'a' + 1) % mod;
    
    int res = 1, ll = 1, lr = n;
    for (int i = 1, j = n; i < j; i++, j--){
        if (get(ll, i) == get(j, lr)){
            res += 2;
            ll = i + 1;
            lr = j - 1;
        }
    }
    if (ll - lr == 1) res--;
    cout << res << '\n';
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    
    p[0] = 1;
    for(int i = 1; i <= 1000000; i++) p[i] = (p[i - 1] * base) % mod;
    
    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...