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;

最新文章

  1. CSS类似微软中国首页的竖向选项卡
  2. lua下的简单OO实现
  3. RxJava操作符之Share, Publish, Refcount
  4. 自定义progressBar的旋转圆圈
  5. HDU 1078 FatMouse and Cheese(记忆化搜索)
  6. AES加解密【示例】
  7. IOS 解析XML文档
  8. LR实战之Discuz开源论坛——网页细分图结果分析(Web Page Diagnostics)
  9. HOOK API (一)——HOOK基础+一个鼠标钩子实例
  10. webview 设置编码
  11. OOP的完美点缀—AOP之SpringAOP实现原理
  12. JAVAEE学习路线分享
  13. ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证
  14. Linux 多进程多线程相关概念
  15. iOS浏览器 new Date() 返回 NaN
  16. c/c++ 多线程 绕过mutex的保护
  17. Eclipse在开发JavaEE时怎么显示隐藏的WebContent和build文件夹
  18. python之路--第一类对象,函数名,变量名
  19. Vue系列之 =&gt; 结合ajax完成列表增删查
  20. JavaScript的3种继承方式

热门文章

  1. scss牛刀小试:解决css中适配浏览器前缀问题
  2. Quick-Cocos2d-x Lua脚本加密打包器
  3. API:什么是API?API与interface的区别
  4. python从字符串中提取数字,使用正则表达式
  5. GL格式一览表
  6. React怎么创建.babelrc文件
  7. 微信的 rpx
  8. sqlserver 使用小技巧总结
  9. 缓冲区溢出实战教程系列(三):利用OllyDbg了解程序运行机制
  10. Redis 命令学习