学了假的 SAM。
struct TREE{ int ne[SZ],len,siz,fa; }t[N<<1];
int tot=1,las=1;
void ins(int c){
int p=las,np=++tot,v,nv; las=np;
for(;p&&!t[p].ne[c];p=t[p].fa) t[p].ne[c]=np;
if(!p) return t[np].fa=1,void(); v=t[p].ne[c];
if(t[v].len==t[p].len+1) return t[np].fa=v,void();
t[nv=++tot]=t[v],t[nv].len=t[p].len+1;
for(;p&&t[p].ne[c]==v;p=t[p].fa) t[p].ne[c]=nv;
t[np].fa=t[v].fa=nv;
}
中间缺少
t[np].len=t[p].len+1;
但是它过了?
提交记录
这是数据问题,还是这样就是对的?