博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu-2222
阅读量:6530 次
发布时间:2019-06-24

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

用了AC自动机,其实是把KMP和trie结合,每次找单词失配时,用像next数组一样的东西可以进行优化,这个不难理解,若只有一个单词,把它构成字典树,这时AC自动机就是KMP,不过感觉这个题目可以有更好的方法吧,我觉得。因为打完代码提交后,用cin,cout就超时了,改成scanf,printf就刚刚过的样子。

#include
#include
#include
#include
using namespace std;char str[1000010];const int maxn = 500010;struct ACA{ int ch[maxn][26],fail[maxn],val[maxn],last[maxn],sz,root; int newnode(){ memset(ch[sz],0,sizeof(ch[sz])); val[sz] = 0; return sz++; } void init(){ sz = 0; root = newnode(); }void insert(char *str){ int length = strlen(str); int now = root; for(int i = 0;i < length;i++){ int &temp = ch[now][str[i] - 'a']; if(!temp){ temp = newnode(); } now = temp; } val[now]++;}void getfail(){ queue
p; fail[root] = root; for(int i = 0;i < 26;i++){ int u = ch[root][i]; if(u){ fail[u] = last[u] = 0; p.push(u); } } while(!p.empty()){ int now = p.front();p.pop(); for(int i = 0;i < 26;i++){ int u = ch[now][i]; if(!u){ ch[now][i] = ch[fail[now]][i]; } else{ fail[u] = ch[fail[now]][i]; last[u] = val[fail[u]] ? fail[u]:last[fail[u]]; p.push(u); } } }}int query(char *str){ int len = strlen(str); int now = root; int ret = 0; for(int i = 0;i < len;i++){ now = ch[now][str[i]-'a']; int tmp = now; while(tmp != root && val[tmp]){ ret += val[tmp]; val[tmp] = 0; tmp = last[tmp]; } } return ret;}}ac;int main(){ int kase,n; scanf("%d",&kase); while(kase--){ ac.init(); scanf("%d",&n); for(int i = 0;i < n;i++){ scanf("%s",str); ac.insert(str); } ac.getfail(); scanf("%s",str); printf("%d\n",ac.query(str)); } return 0;}

 

转载于:https://www.cnblogs.com/hhhhhhhhhhhhhhhhhhhhhhhhhhh/p/3890061.html

你可能感兴趣的文章
MySQL出现Waiting for table metadata lock的场景浅析
查看>>
什么是数据埋点?
查看>>
git回滚
查看>>
vue2.0 引用qrcode.js实现获取改变二维码的样式
查看>>
Python 判断闰年,判断日期是当前年的第几天
查看>>
脏读,幻读,不可重复读解释和例子
查看>>
银行卡信息安全事件频发 互联网站成数据泄露"重灾区"
查看>>
云服务器 ECS 使用OpenAPI管理ECS:使用OpenAPI弹性创建ECS实例
查看>>
5G技术的5大猜想
查看>>
MongoDB 3.0(1):CentOS7 安装MongoDB 3.0服务
查看>>
别随便安装 Pokemon GO被曝藏恶意后门
查看>>
让数据会思考会说话,为出海企业提供多样化数据智能解决方案
查看>>
我眼中的自动化测试框架设计要点
查看>>
FLIF:自由的无损图像格式
查看>>
Google开源Inception-ResNet-v2,提升图像分类水准
查看>>
Opera 出售细节曝光:昆仑出资1.68亿美元
查看>>
CentOS 5.3 下快速安装配置 PPTP ××× 服务器
查看>>
产品经理学习总结之技术和设计篇
查看>>
23种设计模式(15):备忘录模式
查看>>
java基础学习总结——IO流
查看>>