Submission #1221563

#TimeUsernameProblemLanguageResultExecution timeMemory
1221563yassiaPalindromic Partitions (CEOI17_palindromic)C++20
100 / 100
115 ms12032 KiB
#ifndef local
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("O3")
#endif
#include <bits/stdc++.h>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
using ll = long long;

const ll INF = 1e18;
const ll mod = 1e9+9;
ll p = 31;

ll add(ll a, ll b){
    return ((a%mod)+(b%mod))%mod;
}
ll mult(ll a, ll b){
    return ((a%mod)*(b%mod))%mod;
}
ll sub(ll a, ll b){
    return add(a, mod-(b%mod));
}
ll ord(char s){
    return ((s-'a')+1);
}
void solve() {
    string s;
    cin >> s;
    ll n = (ll)s.size();
    vector<ll> pows(n+1);
    pows[0] = 1;
    for (ll i =1; i <= n; i++){
        pows[i] = mult(pows[i-1],p);
    }
    deque<char> o;
    for (auto x : s) {
        o.emplace_back(x);
    }
    ll s1 = 0;
    ll s2 = 0;
    ll len1 = 0;
    ll len2= 0;
    ll ans = 0;
    while(!o.empty()){
        if (o.size()==1) {
            if(s1 == s2 && s1 != 0) {
                ans += 3;
            }
            else {
                ans += 1;
            }
            break;
        }
        char s0 = o.front();
        char sn = o.back();
        s1 = add(s1, mult(ord(s0),pows[len1]));
        s2 = add(ord(sn),mult(s2, p));
        len1++;
        len2++;
        o.pop_front();
        o.pop_back();
        if (s1 == s2) {
            ans += 2;
            s1 = 0;
            s2 = 0;
            len1 = 0;
            len2 = 0;
        }
        else if (o.empty()){
            ans += 1;
        }
    }
    cout<<ans<<endl;

}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
#ifdef local
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
    ll t;
    cin>>t;
    while(t--) solve();
#ifdef local
    printf_s("\n%.5f s", (double) clock() / CLOCKS_PER_SEC);
#endif
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...