Submission #1195632

#TimeUsernameProblemLanguageResultExecution timeMemory
1195632boclobanchatPalindromes (APIO14_palindrome)C++20
100 / 100
21 ms37652 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=1e6+5; struct node { int nex[26],len,sufflink,last,child,cnt; }; node ptree[MAXN]; char c[MAXN]; int cchar=0,cnt=2,suff=2,ans[MAXN]; void ins(char w) { c[++cchar]=w; int v=w-'a'; while(true) { if(c[cchar-ptree[suff].len-1]==w) break; else suff=ptree[suff].sufflink; } int sus=suff; if(!ptree[suff].nex[v]) ptree[suff].nex[v]=++cnt; suff=ptree[suff].nex[v],ptree[suff].child=sus; ptree[suff].len=ptree[sus].len+2; ptree[suff].last=v,ptree[suff].cnt++; if(ptree[suff].len==1) { ptree[suff].sufflink=2; return ; } while(true) { sus=ptree[sus].sufflink; if(c[cchar-ptree[sus].len-1]==w) break; } ptree[suff].sufflink=ptree[sus].nex[v]; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); string s; cin>>s; int n=s.length(); ptree[1].len=-1,ptree[2].sufflink=1; for(auto v:s) ins(v); long long ans=0; for(int i=cnt;i;i--) { ans=max(ans,(long long)ptree[i].len*ptree[i].cnt); ptree[ptree[i].sufflink].cnt+=ptree[i].cnt; } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...