Submission #339710

#TimeUsernameProblemLanguageResultExecution timeMemory
339710nandonathanielPalindromic Partitions (CEOI17_palindromic)C++14
60 / 100
10026 ms13320 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=1000005,MOD=1e9+7; int pref[MAXN],pkt[MAXN]; int dp[MAXN],N; 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=N+1-L; if(L>R)return 0; int &ret=dp[L]; 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)); } } return ret; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t; string s; 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'; } 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...