Submission #578234

#TimeUsernameProblemLanguageResultExecution timeMemory
578234andrei_boacaPalindromic Partitions (CEOI17_palindromic)C++14
100 / 100
302 ms28856 KiB
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
string s;
int t,n;
ll baza=31,mod=1e9+7;
ll h[1000005],pw[1000005];
ll gethash(ll st,ll dr)
{
    ll val=(h[dr]-(h[st-1]*pw[dr-st+1])%mod+mod)%mod;
    return val;
}
int getans(int l,int r)
{
    if(l>r)
        return 0;
    for(int last=l;last<=r;last++)
    {
        int lg=last-l+1;
        int poz=r-lg+1;
        if(poz>last)
        {
            ll h1=gethash(l,last);
            ll h2=gethash(poz,r);
            if(h1==h2)
                return 2+getans(last+1,poz-1);
        }
    }
    return 1;
}
void solve()
{
    cin>>s;
    n=s.size();
    s=" "+s;
    pw[0]=1;
    for(int i=1;i<=n;i++)
    {
        h[i]=((h[i-1]*baza)%mod+s[i]-'a'+1)%mod;
        pw[i]=(pw[i-1]*baza)%mod;
    }
    cout<<getans(1,n)<<'\n';
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    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...