博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[bzoj3940][Usaco2015 Feb]Censoring
阅读量:5348 次
发布时间:2019-06-15

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

最近做题成双成对?不是双倍经验就是两题同解。

   

给定字典,给定字符串,删去字符串中所有字典内单词。保证不会出现二者包含状况。$n \leq 1e5,\sum len \leq 1e5$

AC自动机裸题。build出AC自动机后从左到右插入文本串,同时边匹配边push进栈里。匹配成功就弹栈。

注意要记录匹配到第几个字符的时候,AC自动机指针(我管那个一直蹦的东西就叫指针了?)指到哪里。弹栈之后要指针也要跳回来。

#include
#define x first#define y secondusing namespace std;typedef pair
P;const int N=100010;struct ACAM{ int ch[N][26],cnt[N],f[N]; int sz,rt; void init(){ memset(ch,-1,sizeof ch); memset(cnt,0,sizeof cnt); memset(f,0,sizeof f); sz=rt=0; } void ins(char *s){ int n=strlen(s),u=rt; for(int i=0;i
q; while(!q.empty())q.pop(); for(int i=0;i<26;i++) if(~ch[rt][i]) f[ch[rt][i]]=rt,q.push(ch[rt][i]); else ch[rt][i]=rt; while(!q.empty()){ int u=q.front();q.pop(); for(int i=0;i<26;i++){ int v=ch[u][i]; if(~v){ int now=f[u]; while(f&&!~ch[now][i])now=f[now]; f[v]=ch[now][i];q.push(v); } else ch[u][i]=ch[f[u]][i]; } } } void query(char *s){ int n=strlen(s); stack

S;int u=0; while(!S.empty())S.pop(); for(int i=0;i

ans; while(!S.empty()) ans.push_back(S.top().x+'a'),S.pop(); for(int i=ans.size()-1;~i;i--) printf("%c",ans[i]); }}Aho;char str[N],s[N];int main(){ scanf("%s",str); int n;scanf("%d",&n); Aho.init(); for(int i=1;i<=n;i++){ memset(s,0,sizeof s); scanf("%s",s); Aho.ins(s); } Aho.build(); Aho.query(str);}

 

转载于:https://www.cnblogs.com/orzzz/p/8094213.html

你可能感兴趣的文章
Vue路由系统
查看>>
Linux入门
查看>>
Vue Cli
查看>>
Django出错Xadmin后台报list index out of range
查看>>
vim
查看>>
Django REST framework 基本组件
查看>>
RESTful规范
查看>>
Linux基本命令讲解
查看>>
log4net按级别写到不同文件
查看>>
.NETCore_项目启动设置域名以及端口
查看>>
c# json序列化不包括某列
查看>>
Sql注入校验
查看>>
位运算和取模运算的运算效率对比
查看>>
根据jdk1.8源码整理而得,java集合体系(继承、实现关系)图解,超清晰,一看就懂,方便记忆...
查看>>
jdk1.8 HashMap底层数据结构:散列表+链表+红黑树(图解+源码)
查看>>
jdk1.8源码解析:HashMap底层数据结构之链表转红黑树的具体时机
查看>>
jdk1.8 HashMap底层数据结构:深入解析为什么jdk1.8 HashMap的容量一定要是2的n次幂...
查看>>
java-简单工程模板
查看>>
UML-GoF设计模式-总结
查看>>
idea使用eclipse风格
查看>>