Submission #339703

#TimeUsernameProblemLanguageResultExecution timeMemory
339703nandonathanielPalindromic Partitions (CEOI17_palindromic)C++14
60 / 100
920 ms5000 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=10005,MOD=1e9+7; int pref[MAXN],pkt[MAXN]; map<int,int> dp[MAXN]; string s; int get(int L,int R){ if(L>R)return 0; return (pref[R]-((1LL*pref[L-1]*pkt[R-L+1])%MOD)+MOD)%MOD; } int DP(int L,int R){ if(L>R)return 0; if(dp[L].count(R))return dp[L][R]; int ret=1; for(int i=(R-L+1)/2;i>=1;i--){ if(get(L,L+i-1)==get(R-i+1,R)){ ret=max(ret,2+DP(L+i,R-i)); } } return dp[L][R]=ret; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t,n; cin >> t; while(t--){ cin >> s; n=(int)s.length(); for(int i=1;i<=n;i++)dp[i].clear(); pkt[0]=1; for(int i=0;i<n;i++){ pref[i+1]=(26LL*pref[i]+s[i]-'a')%MOD; pkt[i+1]=(26LL*pkt[i])%MOD; } cout << DP(1,n) << '\n'; } 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...