博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AC自动机
阅读量:4876 次
发布时间:2019-06-11

本文共 1216 字,大约阅读时间需要 4 分钟。

#include
#include
using namespace std;struct node {node *nxt[26],*fail;int val;};node mem[500010]; int cnt;inline node *alloc() {return mem+cnt++;}void ins(node *root,char *s) { while(*s!=0) { int v=*s++-'a'; if(!root->nxt[v])root->nxt[v]=alloc(); root=root->nxt[v]; } root->val++;}queue
q;void build(node *root) { for(int i=0; i<26; i++) if(root->nxt[i])root->nxt[i]->fail=root,q.push(root->nxt[i]); while(!q.empty()) { node *u=q.front();q.pop(); for(int i=0; i<26; i++) if(u->nxt[i])u->nxt[i]->fail=u->fail->nxt[i],q.push(u->nxt[i]); else u->nxt[i]=u->fail->nxt[i]; }}int query(node *root,char *s) { int ans=0; while(*s!=0) { root=root->nxt[*s++-'a']; for(node *t=root; t&&~t->val; t=t->fail)ans+=t->val,t->val=-1; } return ans;}int n;char p[1000005];int main() { node *root=alloc(); scanf("%d",&n); for(int i=1; i<=n; i++)scanf("%s",p),ins(root,p); build(root); scanf("%s",p); printf("%d\n",query(root,p)); return 0;}

Luogu P3838板子题。

(啊啊啊为什么我自带大常数用指针还这么慢啊啊啊啊)$\epsilon\ \varepsilon$

转载于:https://www.cnblogs.com/TheRoadToAu/p/8849866.html

你可能感兴趣的文章
好的git教程
查看>>
Delphi XE增强的RTTI妙用--动态创建包中的窗口类
查看>>
unisynedit 在Delphi 2010下的编译问题
查看>>
mssql 动态行转列。
查看>>
工作杂记
查看>>
老话题,权限设计及实现!
查看>>
POJ 2393 贪心 简单题
查看>>
3. Quartz2D 绘制矩形、圆形、弧形
查看>>
latex 学习笔记
查看>>
SQL 数据库 学习 005 学习必备的一些操作 --- 如何新建数据库 如何附加和分离数据库(如何备份还原数据库) 如何删除数据库...
查看>>
[php排错] Forbidden You don't have permission to access / on this server.
查看>>
MVC中的helper标签
查看>>
Spring Cloud Gateway入门
查看>>
XCode 4.2 新功能 - Storyboard
查看>>
Tomcat不保存SESSIONS.ser设置
查看>>
QEMU使用手册 - 2 QEMU计算机系统模拟器
查看>>
VIM技巧之去除代码行号并缩进代码
查看>>
自动化测试用例getText()获取某一个元素的值返回null或空
查看>>
大数智能未来
查看>>
virtualenv和virtualenvwrapper 的安装和使用
查看>>