ac自动机模板
ac自动机模板
struct Aho_Corasick_Automaton { int tr[N][26],cnt[N],ne[N],idx; void insert(char *s) { int p=0; for(int i=0;s[i];i++) { int u=s[i]-'a'; if(!tr[p][u]) tr[p][u]=++idx; p=tr[p][u]; } cnt[p]++; } void build() { queue<int>q; for(int i=0;i<26;i++) if(tr[0][i]) q.push(tr[0][i]),ne[tr[0][i]]=0; while(q.size()) { int u=q.front(); q.pop(); for(int i=0;i<26;i++) if(tr[u][i]) ne[tr[u][i]]=tr[ne[u]][i],q.push(tr[u][i]); else tr[u][i]=tr[ne[u]][i]; } } int query(char *s) { int ans=0,now=0; for(int i=0;s[i];i++) { int u=s[i]-'a'; now=tr[now][u]; for(int t=now;t&&~cnt[t];t=ne[t]) ans+=cnt[t],cnt[t]=-1; } return ans; } }AC;

浙公网安备 33010602011771号