ac自动机板子

procedure insert;
var now,i:longint;
      dd:char;
begin
  now:=1;len:=length(s);
  for i:=1 to len do
  begin
    dd:=s[i];
    if t[now].son[dd]=0 then
    begin
      inc(tt);t[now].son[dd]:=tt;
    end;
    now:=t[now].son[dd];
  end;
end;

procedure build;
var h,tail,i,v:longint;j:char;
begin
for j:='a' to 'z' do t[0].son[j]:=1; t[0].fai:=1;h:=0;tail:=1; q[1]:=1; while h<>tail do begin inc(h);i:=q[h]; for j:='a' to 'z' do begin v:=t[i].son[j]; if v=0 then begin t[i].son[j]:=t[t[i].fai].son[j];continue; end; t[v].fai:=t[t[i].fai].son[j]; inc(tail);q[tail]:=v; end; end; end;

 

转载于:https://www.cnblogs.com/oldjang/p/6490736.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值