Submission #339430

#TimeUsernameProblemLanguageResultExecution timeMemory
339430nandonathanielPalindromic Partitions (CEOI17_palindromic)C++14
35 / 100
22 ms1388 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=305,MOD=1e9+7; int pref[MAXN],pkt[MAXN]; int dp[MAXN][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; int &ret=dp[L][R]; if(ret!=-1)return ret; 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 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(); 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; } memset(dp,-1,sizeof(dp)); 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...