제출 #1149729

#제출 시각아이디문제언어결과실행 시간메모리
1149729SSSMPalindromic Partitions (CEOI17_palindromic)C++20
100 / 100
47 ms1508 KiB
#include <bits/stdc++.h>

/*
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC target ("avx2")
*/

using namespace std;

/*
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp> 
using namespace __gnu_pbds;
template<class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
*/

#define F first
#define S second
#define pb push_back
#define md(a) (((a%mod)+mod)%mod)
#define all(a) a.begin(), a.end()
#define MP make_pair
#define lc (id<<1)
#define rc (lc|1)
#define mid (l+r)/2
#define kill(a) cout << a << "\n", exit(0)
#define SZ(a) (ll)a.size()

typedef pair<int,int> pii;
typedef pair<long long ,long long> pll;
typedef long long ll;
typedef long double ld;
typedef vector<vector<ll>> matrix;
mt19937_64  rng(chrono::steady_clock::now().time_since_epoch().count());

ll const maxn=1e6+10, mod=1e9+9, INF=1e18, LOG=31, sq=65;

ll poww(ll a, ll b, ll mod) {
 if (b == 0) return 1;
 return 1 * poww(1 * a * a % mod, b / 2, mod) * ((b % 2 == 1) ? a : 1) % mod;
}

string s;
ll base=701;
void solve()
{
    cin>>s;
    ll ans=0, h1=0, h2=0;
    ll n=SZ(s), t=1;
    for(ll i=0;i<n-i-1;i++)
    {
        h1=md(h1*base+(s[i]-'a'));
        h2=md(h2+(s[n-i-1]-'a')*t);
        t=md(t*base);
        if(h1==h2)
        {
            ans+=2;
            h1=h2=0;
            t=1;
        }
    }
    if(h1!=h2 || n&1) ans++;
    cout<<ans<<"\n";
}

int main()
{
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

    ll 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...