博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 3065病毒侵袭持续中(ac自动机)
阅读量:4708 次
发布时间:2019-06-10

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

题目链接 

中文题题意不解释了。

依旧稍微改一下ac自动机模版就能过了。还有一个坑点!是多组数据!!!

 

#include 
#include
#include
#include
using namespace std;const int M = 5e4 + 10 , MM = 2e6 + 10 , N = 1e3 + 10;char str[N][60] , sl[MM];int Next[M][27] , fail[M] , End[M] , c[M / 10] , L , root , cnt , ans;int newnode() { for(int i = 0 ; i <= 26 ; i++) { Next[L][i] = -1; } End[L++] = 0; return L - 1;}void init() { L = 0 , ans = 0; root = newnode(); memset(c , 0 , sizeof(c));}void build(char s[]) { int len = strlen(s); int now = root; for(int i = 0 ; i < len ; i++) { int id = s[i] - 'A'; if(Next[now][id] == -1) { Next[now][id] = newnode(); } now = Next[now][id]; } End[now] = ++ans;}void get_fail() { queue
q; fail[root] = root; for(int i = 0 ; i <= 26 ; i++) { if(Next[root][i] == -1) { Next[root][i] = root; } else { fail[Next[root][i]] = root; q.push(Next[root][i]); } } while(!q.empty()) { int now = q.front(); q.pop(); for(int i = 0 ; i <= 26 ; i++) { if(Next[now][i] == -1) { Next[now][i] = Next[fail[now]][i]; } else { fail[Next[now][i]] = Next[fail[now]][i]; q.push(Next[now][i]); } } }}void match(char s[]) { int len = strlen(s); int now = root; for(int i = 0 ; i < len ; i++) { int id; if(s[i] <= 'Z' && s[i] >= 'A') { id = s[i] - 'A'; } else { id = 26; } now = Next[now][id]; int tmp = now; while(tmp != root) { if(End[tmp] > 0) { c[End[tmp]]++; } tmp = fail[tmp]; } }}int main(){ int n; while(scanf("%d" , &n) != EOF) { init(); for(int i = 0 ; i < n ; i++) { scanf("%s" , str[i + 1]); build(str[i + 1]); } getchar(); get_fail(); gets(sl); match(sl); for(int i = 0 ; i < n ; i++) { if(c[i + 1] != 0) { printf("%s: %d\n" , str[i + 1] , c[i + 1]); } } } return 0;}

转载于:https://www.cnblogs.com/TnT2333333/p/6081267.html

你可能感兴趣的文章
如何恢复oracle中已删除的表
查看>>
双向BFS(转)
查看>>
【最短路】Dijkstra+ 链式前向星+ 堆优化(优先队列)
查看>>
linux下实现keepalived+nginx高可用
查看>>
Html Agility Pack解析Html(C#爬虫利器)
查看>>
GridView中的CheckBox选中 (JQuery)
查看>>
webform(四)简单控件
查看>>
验证码
查看>>
敏捷开发入门教程
查看>>
C#发现之旅(收藏)
查看>>
POJ1125 Stockbroker Grapevine 多源最短路
查看>>
HDU 2126 Buy the souvenirs
查看>>
顺序容器的insert使用方法
查看>>
Markdown的使用
查看>>
销售系统学习.mdl
查看>>
触发器
查看>>
mysql配置默认字符集为UTF8mb4
查看>>
WPF实现3D翻转的动画效果
查看>>
自定义圆环进度条
查看>>
UILayer
查看>>