Submission #132741

#TimeUsernameProblemLanguageResultExecution timeMemory
132741Bench0310Palindromic Partitions (CEOI17_palindromic)C++17
60 / 100
10086 ms53464 KiB
#include <bits/stdc++.h> using namespace std; const int N=1000000; const long long p=29; const long long mod=1000000007; long long e[N]; int n; string s; int dp[N]; int solve(int l,int r) { if(l>r) return 0; if(l==r) return 1; if(dp[l]!=-1) return dp[l]; int res=0; long long one=0,two=0; for(int i=0;l+i<r-i;i++) { one=((one*p)+(s[l+i]-'a'))%mod; two=(two+e[i]*(s[r-i]-'a'))%mod; if(one==two) res=max(res,2+solve(l+i+1,r-i-1)); } if(res==0) res=1; return dp[l]=res; } int main() { e[0]=1; for(int i=1;i<N;i++) e[i]=(e[i-1]*p)%mod; int t; cin >> t; while(t--) { cin >> s; n=s.size(); memset(dp,-1,sizeof dp); cout << solve(0,n-1) << endl; } 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...