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

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

贴份模板

胡大神和崔大神的组合模板

#include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define N 1000010#define LL long long#define INF 0xfffffff#define maxch 26const double eps = 1e-8;const double pi = acos(-1.0);const double inf = ~0u>>2;const int child_num = 26;char ss[N];class ACAutomation{ private: int ch[N][maxch]; int val[N]; int fail[N]; int Q[N]; int id[128]; int sz; // int dp[2][N][1<<10]; public: void init() { fail[0] = 0; for(int i = 0 ; i < child_num; i++) id[i+'a'] = i; } void reset()//初始化 { memset(ch[0],0,sizeof(ch[0])); memset(val,0,sizeof(val)); sz = 1; } void insert(char *a,int key)//建立trie树 { int p = 0; for( ; *a ; a++) { int c = id[*a]; if(ch[p][c]==0) { memset(ch[sz],0,sizeof(ch[sz])); val[sz] = 0; ch[p][c] = sz++; } p = ch[p][c]; } val[p] += key; } void construct()//构建fail指针 { int head = 0,tail = 0,i; for(i = 0 ;i < child_num ; i++) { if(ch[0][i]) { fail[ch[0][i]] = 0; Q[tail++] = ch[0][i]; } } while(head!=tail) { int u = Q[head++]; for(i = 0 ;i < child_num ;i ++) { if(ch[u][i]!=0) { Q[tail++] = ch[u][i]; fail[ch[u][i]] = ch[fail[u]][i]; } else ch[u][i] = ch[fail[u]][i]; } } } int work(char *s) { int k = strlen(s); int p = 0,ans = 0; for(int i = 0; i < k ; i++) { int d = s[i]-'a'; p = ch[p][d]; int tmp = p; while(tmp!=0&&val[tmp]!=0) { ans+=val[tmp]; val[tmp] = 0; tmp = fail[tmp]; } } return ans; }}ac;int main(){ int t,n; char word[55]; ac.init(); cin>>t; while(t--) { cin>>n; ac.reset(); while(n--) { scanf("%s",word); ac.insert(word,1); } ac.construct(); scanf("%s",ss); printf("%d\n",ac.work(ss)); } return 0;}

 

 

转载于:https://www.cnblogs.com/shangyu/p/3727513.html

你可能感兴趣的文章
关于vue的源码调试
查看>>
003.第一个动画:绘制直线
查看>>
K2BPM怎么让金融数据更有意义?
查看>>
史玉柱自述:我是如何带队伍的
查看>>
靶形数独【贪心+深搜】
查看>>
读大道至简第三章有感
查看>>
BeforeFieldInit的小叙
查看>>
TeamViewer的下载地址,低调低调
查看>>
005 线程ID和线程的优先级
查看>>
POJ 3067 Japan (树状数组 && 控制变量)
查看>>
python基础条件和循环
查看>>
an exciting trip
查看>>
【转】xmind8 破解激活教程
查看>>
Mysql用命令方式启动服务
查看>>
【贪心】codeforces A. Heidi and Library (easy)
查看>>
【leetcode】lower_bound
查看>>
跨站请求伪造(CSRF)
查看>>
EF Code First数据库映射规则及配置
查看>>
.Net StackFrame
查看>>
Qt 学习之路:视图选择 (QItemSelectionModel)
查看>>