警钟做匀加速直线运动
查看原帖
警钟做匀加速直线运动
572133
潘德理2010楼主2025/8/31 20:41
  • nn 不是模式串长度的上限。

  • 一定不要忘记,让以一个节点结尾的字符串的信息 继承 其 fail 节点的信息。放出代码片段以供理解。

void ins(int x){
	int u=0;
	for(int i=1;i<=l[x];i++){
		int w=c[x][i]-'a';
		if(t[u][w]==0){
			t[u][w]=++cnt;
		}
		u=t[u][w];
	}
	r[u]|=(1<<(l[x]-1));
}
void build(){
	for(int i=0;i<26;i++){
		if(t[0][i]) q.push(t[0][i]);
	}
	while(!q.empty()){
		int u=q.front();
		q.pop();
		r[u]|=r[fa[u]];
		for(int i=0;i<26;i++){
			if(t[u][i]){
				fa[t[u][i]]=t[fa[u]][i];
				q.push(t[u][i]);
			}
			else t[u][i]=t[fa[u]][i];
		}
	}
}
2025/8/31 20:41
加载中...