我调不出来!我调不出来!我调不出来!我调不出来!我调不出来!我调不出来!我调不出来!
#include<bits/stdc++.h>
using namespace std;
const int QAQ=2000010;
string s;
long long ans;
vector<int> dian[QAQ];
int tr[QAQ][31],fa[QAQ],cnt,last;
long long len[QAQ],ci[QAQ];
struct xxx
{
void init() {cnt=1,last=1;}
void add(int x)
{
int p=last,np=++cnt,q,nq;last=np;
len[np]=len[p]+1,ci[np]=1;
for(;p&&!tr[p][x];p=fa[p]) tr[p][x]=np;
if(!p) fa[np]=1;
else
{
q=tr[p][x];
if(len[q]==len[p]+1) fa[np]=q;
else
{
nq=++cnt;
for(int i=0;i<26;i++) tr[nq][i]=tr[q][i];
fa[nq]=fa[q],len[nq]=len[p]+1,fa[q]=fa[np]=nq;
for(;p&&tr[p][x]==q;p=fa[x]) tr[p][x]=nq;
}
}
}
void dfs(int x)
{
for(int i=0;i<(int)dian[x].size();i++) dfs(dian[x][i]),ci[x]+=ci[dian[x][i]];
if(ci[x]!=1) ans=max(ans,1ll*ci[x]*len[x]);
}
void gowork()
{
init();
for(int i=0;i<(int)s.size();i++) add(s[i]-'a');
for(int i=2;i<=cnt;i++) dian[fa[i]].push_back(i);
dfs(1);
cout<<ans;
}
} qwp;
signed main() {return cin>>s,qwp.gowork(),0;}
#include<bits/stdc++.h>
using namespace std;
int lst=1,tot=1;
int trie[2000001][26],cnt[2000001];
int fa[2000001],len[2000001];
long long ans;
void add(int x)
{
int p=lst;
int now=lst=++tot;
cnt[now]=1;
len[now]=len[p]+1;
for(;p&&!trie[p][x];p=fa[p])trie[p][x]=now;
if(!p) fa[now]=1;
else
{
int q=trie[p][x];
if(len[q]==len[p]+1) fa[now]=q;
else
{
int split=++tot;
for(int i=0;i<26;++i)
trie[split][i]=trie[q][i];
len[split]=len[p]+1;
fa[split]=fa[q];
fa[q]=fa[now]=split;
for(;p&&trie[p][x]==q;p=fa[p])
trie[p][x]=split;
}
}
}
vector<int>road[2000001];
void dfs(int x)
{
for(int i=0;i<road[x].size();++i) dfs(road[x][i]),cnt[x]+=cnt[road[x][i]];
if(cnt[x]!=1)
ans=max(ans,1ll*cnt[x]*len[x]);
}
string s;
signed main()
{
cin>>s;
for(int i=0;i<s.size();++i)
add(s[i]-'a');
for(int i=2;i<=tot;++i) road[fa[i]].push_back(i);
dfs(1);
cout<<ans;
}
一摸一样,下面这个我交了,A 了,非常不好!!!!!!