Submission #1291155

#TimeUsernameProblemLanguageResultExecution timeMemory
1291155hahaPalindromic Partitions (CEOI17_palindromic)C++20
100 / 100
87 ms19492 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e6+5;
const ll MOD=1e9+7;
const int base=31;

int t;
string s;
ll Hash[maxn],Pow[maxn];

ll get(int i,int j)
{
    return (Hash[j]-Hash[i-1]*Pow[j-i+1]+MOD*MOD)%MOD;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    Pow[0]=1;
    for(int i=1;i<=1e6;i++) Pow[i]=(Pow[i-1]*base)%MOD;
    cin>>t;
    while(t--){
        cin>>s;
        int n=s.size();
        s=" "+s;
        for(int i=1;i<=n;i++){
            Hash[i]=(Hash[i-1]*base+s[i]-'a'+1)%MOD;
        }
        int l=1,r=n,len=1,ans=0;
        while(l+len-1<r-len+1){
            if(get(l,l+len-1)==get(r-len+1,r)){
                ans+=2;
                l=l+len;
                r=r-len;
                len=1;
            }
            else len++;
        }
        if(l<=r) ans++;
        cout<<ans<<'\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...