挂个AC自动机
2024-10-19 06:21:36
struct ACM{
int ch[N][],f[N],cnt[N];
int sz,rt;
int ins(char *s){
int n=strlen(s),u=rt;
for(int i=;i<n;i++){
int c=s[i]-'a';S[tot++]=s[i];
if(!ch[u][c])ch[u][c]=++sz;
u=ch[u][c];
}
cnt[u]=;
return u;
}
void build(){
queue<int>q;
while(!q.empty())q.pop();
int u=;
for(int c=;c<;c++){
int *v=&ch[rt][c];
if(*v)
f[*v]=rt,q.push(*v);
else *v=rt;
}
while(!q.empty()){
int u=q.front();q.pop();
for(int c=;c<;c++){
int *v=&ch[u][c];
if(*v){
f[*v]=ch[f[u]][c];q.push(*v);
}
else *v=ch[f[u]][c];
}
}
}
void query(char *s){
int n=strlen(s),u=rt;
for(int i=;i<n;i++){
if(s[i]=='#'){
u=;continue;
}
int c=s[i]-'a';
while(u&&!ch[u][c])u=f[u];
u=ch[u][c];
int v=u;
while(v){
if(cnt[v])cnt[v]++;
v=f[v];
}
}
}
}Aho;
最新文章
- CSS类似微软中国首页的竖向选项卡
- lua下的简单OO实现
- RxJava操作符之Share, Publish, Refcount
- 自定义progressBar的旋转圆圈
- HDU 1078 FatMouse and Cheese(记忆化搜索)
- AES加解密【示例】
- IOS 解析XML文档
- LR实战之Discuz开源论坛——网页细分图结果分析(Web Page Diagnostics)
- HOOK API (一)——HOOK基础+一个鼠标钩子实例
- webview 设置编码
- OOP的完美点缀—AOP之SpringAOP实现原理
- JAVAEE学习路线分享
- ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证
- Linux 多进程多线程相关概念
- iOS浏览器 new Date() 返回 NaN
- c/c++ 多线程 绕过mutex的保护
- Eclipse在开发JavaEE时怎么显示隐藏的WebContent和build文件夹
- python之路--第一类对象,函数名,变量名
- Vue系列之 =>; 结合ajax完成列表增删查
- JavaScript的3种继承方式