Submission #1189384

#TimeUsernameProblemLanguageResultExecution timeMemory
1189384PieArmyPalindromic Partitions (CEOI17_palindromic)C++20
100 / 100
225 ms46316 KiB
#include<bits/stdc++.h> typedef long long ll; #define pb push_back #define fr first #define sc second #define endl '\n' using namespace std; typedef __int128_t huge; const huge MOD=(1ll<<61)-1; const huge K=29; int n; int arr[1000023]; int opt[1000023]; int dp[1000023]; huge has[1000023]; huge kat[1000023]; huge cal(int l,int r){ return (has[r]+MOD-((has[l-1]*kat[r-l+1])%MOD))%MOD; } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); int t;cin>>t; kat[0]=1; for(int i=1;i<=1e6;i++){ kat[i]=((kat[i-1])*K)%MOD; } while(t--){ string s;cin>>s; n=s.size(); for(int i=1;i<=n;i++){ arr[i]=s[i-1]-'a'+1; opt[i]=1; dp[i]=0; has[i]=has[i-1]*K; has[i]+=arr[i]; has[i]%=MOD; } dp[n+1]=0; opt[n+1]=1; int ans=0; int las=0; for(int i=1;i<=n/2;i++){ if(cal(opt[i],i)==cal(n-i+1,n-opt[i]+1)){ opt[i+1]=i+1; ans++; las=i; } else opt[i+1]=opt[i]; } cout<<ans*2+(las*2!=n)<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...