题目:
学习材料:
#include#include #include #define ll long longusing namespace std;const int N=1e6+5,M=N<<1,K=30;int cnt=1,go[M][K],fa[M],siz[M],l[M],lst=1;//=1int tx[N],a[M];char ch[N];ll Mx(ll a,ll b){ return a>b?a:b;}void add(int w){ int p=lst,np=++cnt;lst=np;l[np]=l[p]+1; for(;p&&!go[p][w];p=fa[p])go[p][w]=np; if(!p)fa[np]=1;// 1 not 0 else { int q=go[p][w]; if(l[q]==l[p]+1)fa[np]=q; else { int nq=++cnt; l[nq]=l[p]+1; fa[nq]=fa[q]; fa[q]=nq; fa[np]=nq; memcpy(go[nq],go[q],sizeof go[q]); for(;go[p][w]==q;p=fa[p])go[p][w]=nq; } } siz[np]=1;}int main(){ scanf("%s",ch);int n=strlen(ch); for(int i=0;i 1)ans=Mx(ans,(ll)siz[d]*l[d]); } printf("%lld\n",ans); return 0;}