AC自动机在预处理fail的时候预处理下节点对应的匹配串的长度

这样复杂度就是严格\(\Theta(n)\)的

只需要一个栈,在trie图上跑就可以了

#include"cstdio"
#include"cstring"
#include"iostream"
#include"algorithm"
using namespace std;const int MAXN=1e5+5;
const int siz=26;int n,cnt;
int q[MAXN],id[MAXN];
char s[MAXN],ch[MAXN],stk[MAXN];
struct Trie{int vis,fail,dep,val;int sn[siz];
}T[MAXN];void ins(char *ch)
{int ln=strlen(ch+1),nw=0;for(int i=1;i<=ln;++i){if(!T[nw].sn[ch[i]-'a']) T[nw].sn[ch[i]-'a']=++cnt,T[cnt].dep=T[nw].dep+1;nw=T[nw].sn[ch[i]-'a'];}++T[nw].vis,T[nw].val=T[nw].dep;return;
}void Getfail()
{int hd=1,tl=0;for(int i=0;i<siz;++i) if(T[0].sn[i]) q[++tl]=T[0].sn[i];while(hd<=tl){int nw=q[hd++];T[nw].val=max(T[nw].val,T[T[nw].fail].val);for(int i=0;i<siz;++i){if(T[nw].sn[i]){T[T[nw].sn[i]].fail=T[T[nw].fail].sn[i];q[++tl]=T[nw].sn[i];}else T[nw].sn[i]=T[T[nw].fail].sn[i];}}return;
}void slv(char *ch)
{int ln=strlen(ch+1),ct=0;for(int i=1;i<=ln;++i){stk[++ct]=ch[i];id[ct]=T[id[ct-1]].sn[ch[i]-'a'];ct-=T[id[ct]].val;}for(int i=1;i<=ct;++i) putchar(stk[i]);puts("");return;
}int main()
{scanf("%s",s+1);scanf("%d",&n);for(int i=1;i<=n;++i) scanf("%s",ch+1),ins(ch);Getfail();slv(s);return 0;
}

转载于:https://www.cnblogs.com/AH2002/p/10059470.html

[USACO15FEB]审查(黄金)Censoring (Gold)相关推荐

  1. P3121 [USACO15FEB]审查(黄金)Censoring (Gold)

    题目描述 Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so they h ...

  2. AC自动机-洛谷3121 [USACO15FEB]审查(黄金)Censoring (Gold)

    https://www.luogu.org/problem/show?pid=3121#sub 首先题目看清楚 FJ注意到列表中的单词不会出现一个单词是另一个单词子串的情况,这意味着每个列表中的单词在 ...

  3. 带你全面了解比特黄金(bitcoin gold)分叉

    比特币基于的区块链技术,每一笔交易都被存储在区块中,而区块的大小在初始时候固定在1M大小,而每笔交易的大小则为4k,比特币区块链每十分钟产生一个新块,那么这就以为着每秒只能处理3条交易记录,这在比特币 ...

  4. 黄金白银、古董与收藏

    1. 白金与黄金 根据国家贵金属首饰标准,只有铂金才可以称为白金.所以 18K 白金是一个错误的概念(或者说混淆视听的讲法).严格意义上应该称之为 18K 白色 K 金.18K 白色 K 金是 75% ...

  5. 周怎么换算成月_最大的黄金ETF出现增持,震荡周如何操作?

    黄金波动区间继续扩大,多空点位找到了! 这将是个金银震荡周的预判已经实现,接连几天的波动区间扩大,黄金单边上行动能已经消耗完毕,那么我们应该怎么操作? 继现货黄金昨日亚盘收报于1639.3美元后,美盘 ...

  6. 邓耀鑫:黄金短线继续下挫,黄金最新行情分析及操作建议

    投资即要巴菲特的价值投资法,更要索罗斯的反折射投机对冲,更要像西蒙斯的壁虎交易.交易要时刻保持一颗冷静的心态,和沉着的态度,最近黄金反反复复,但没有脱离如来佛祖的手撑,千万不要被周围追涨杀跌的氛围所干 ...

  7. python小游戏之黄金矿工

    推荐一个黄金矿工游戏(py原创),你能玩一整天!↓ ↓ ↓ 首先定义一些要用到的变量及列表 变量\列表名 用途 gold 记录挖了多少黄金 times 每次挖金的数量 energy 体力值 # 黄金列 ...

  8. 多头表现乏力 黄金技术面大周期数月持续盘整

    周一黄金开于1784.34美元/盎司,最高上探至1787.52美元/盎司,最低触及1775.51美元/盎司,收盘于1778.09美元/盎司,周二开于1778.10美元/盎司,现报于1779.85美元/ ...

  9. solidity开发智能合约

    文章目录 1 Solidity与智能合约 2 智能合约概述 3 以太坊简介 4 以太坊交互工具 5 开发环境搭建 5.1 remix在线编译器 5.2 搭建本地网络 5.2.1 安装本地remix-i ...

最新文章

  1. 多重影分身:一套代码如何生成多个小程序?
  2. mysql中拼接用什么_MySQL中常用的拼接语句的小结(代码示例)
  3. scala spark 埋点统计_spark—1:WordCount(Python与Scala对照)
  4. Typescript中class的extends码源分析
  5. 《堡垒之夜》中你可能没注意到的设计
  6. hdu 1115 计算多边形重心
  7. ITM_win_agentCPU内存占用较高
  8. Domino的压缩数据库的Load Compact命令
  9. print($arr,true)的参数true表示将$arr的值返会,而不是打印
  10. u大师u盘启动盘制作工具教你使用无线网卡连不上网应该如何处理
  11. 数字集成电路版图设计(二)——Cadence IC简单的反相器版图设计
  12. 陌然系列小程序更新了
  13. 常用八大测试用例设计方法
  14. Swift忽略大小写搜索子字符串的三种方法及性能对比
  15. 生成模型笔记预备知识笔记——概率分布变换
  16. 关于空字符(NUL)在三种不同语言中的匹配
  17. 用Python实现带GUI 的exe
  18. java并发编程实战wwj----------------------第二阶段--------------12-13-14-15
  19. 用c语言编写棋盘以及光标,C语言实习指导书.doc
  20. 为什么很多编程语言中数组都是从 0 开始编号

热门文章

  1. 喜马拉雅第三方客户端开发(接口和接口数据解析)。
  2. SQL基础教程--第二章练习题
  3. pbmplus-图像文件格式转换包与PBM/PGM/PPM 格式图像文件
  4. Redis下分布式锁的实现
  5. 计算机视觉 学习笔记(三)全景拼接
  6. Chrome谷歌浏览器如何截取整个网页长图?
  7. 为什么 CTO 不写代码,还这么牛逼?
  8. 如何成为一个优秀的综合布线培训讲师
  9. 深度解析:为什么说持续交付将统治IT运维?
  10. 求序列中第k小的数_推荐算法序列建模现状