首页 > 代码库 > SAM板子
SAM板子
function newnode(x:longint):longint; begin inc(cnt);dis[cnt]:=x;exit(cnt); end; procedure add(id:longint); var ch,i:char;p,np,q,nq,j:longint; begin ch:=s[id];np:=newnode(id);p:=last;last:=np; while(p>0)and(t[p].son[ch]=0)do begin t[p].son[ch]:=np;p:=t[p].fa; end; if p=0 then t[np].fa:=root else begin q:=t[p].son[ch]; if dis[q]=dis[p]+1 then t[np].fa:=q else begin nq:=newnode(dis[p]+1); for i:=‘a‘ to ‘z‘ do t[nq].son[i]:=t[q].son[i]; t[nq].fa:=t[q].fa; t[q].fa:=nq;t[np].fa:=nq; while t[p].son[ch]=q do begin t[p].son[ch]:=nq;p:=t[p].fa; end; end; end; end; procedure build; var i,len:longint; begin readln(s);len:=length(s); cnt:=1;root:=1;last:=1; for i:=1 to len do add(i); for i:=1 to cnt do inc(sum[dis[i]]); for i:=1 to len do inc(sum[i],sum[i-1]); for i:=cnt downto 1 do begin tmp[sum[dis[i]]]:=i;dec(sum[dis[i]]); end; end;
SAM板子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。