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

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

#include
using namespace std;const int maxn = 1e7 + 5;struct node{ node *next[26]; node *fail; int sum;};int cnt;node *root,*q[maxn];void Insert(char *s){ node *newnode,*p; p = root; for(int i = 0; s[i]; i++) { int x = s[i] - 'a'; if(p->next[x] == NULL) { newnode=(struct node *)malloc(sizeof(struct node)); for(int j=0; j<26; j++) newnode->next[j] = 0; newnode->sum = 0; newnode->fail = 0; p->next[x]=newnode; } p = p->next[x]; } p->sum++;}void build_fail_pointer(){ int head,tail; head = 0; tail = 1; q[head] = root; node *p; node *temp; while(head < tail) { temp = q[head++]; for(int i = 0; i <= 25; i++) { if(temp->next[i]) { if(temp == root) { temp->next[i]->fail = root; } else { p = temp->fail; while(p) { if(p->next[i]) { temp->next[i]->fail = p->next[i]; break; } p = p->fail; } if(p == NULL) temp->next[i]->fail = root; } q[tail++] = temp->next[i]; } } }}void ac_automation(char *ch){ node *p = root; int len = strlen(ch); for(int i = 0; i < len; i++) { int x = ch[i] - 'a'; while(!p->next[x] && p != root) p = p->fail; p = p->next[x]; if(!p) p = root; node *temp = p; while(temp != root) { if(temp->sum >= 0) { cnt += temp->sum; temp->sum = -1; } else break; temp = temp->fail; } }}char key[70],pattern[maxn];int main(){// freopen("Input.txt","r",stdin); int T,N; scanf("%d",&T); while(T--) { root=(struct node *)malloc(sizeof(struct node)); for(int j=0; j<26; j++) root->next[j] = 0; root->fail = 0; root->sum = 0; scanf("%d",&N); getchar(); for(int i = 1; i <= N; i++) { gets(key); Insert(key); } gets(pattern); cnt = 0; build_fail_pointer(); ac_automation(pattern); printf("%d\n",cnt); } return 0;}

 

转载于:https://www.cnblogs.com/pach/p/7227869.html

你可能感兴趣的文章
python2.6 安装rsa的包
查看>>
undo表空间使用率过高,且迟迟不释放问题
查看>>
scons *** no sconstruct file found求解决办法
查看>>
BIND基础配置详解
查看>>
火狐增加安全端口,每次用都得查,好麻烦,自己记录一下
查看>>
c# 多线程排队队列实现的源码
查看>>
LDA入门与Java实现
查看>>
Windows下搭建Nginx+PHP运行环境
查看>>
19_css背景控制.html
查看>>
计算机网络测试和故障诊断的发展
查看>>
Delphi 与 DirectX 之 DelphiX(29): TDIB.AddMonoNoise();
查看>>
Windows Server 2008 FTP用户目录隔离模式
查看>>
zookeeper-kafka环境搭建,生产者消费者终端测试
查看>>
Catnut 微博app第一个版本发布了
查看>>
Cocos Creator常见问题汇总
查看>>
String MVC 异常处理
查看>>
vsftpd中锁定用户目录
查看>>
探索MySQL高可用架构之MHA(3)
查看>>
org.apache.struts2.json.JSONWriter can not access a member of class
查看>>
美国买房十大步骤
查看>>