#AC自动机#洛谷 2444 [POI2000]病毒】的更多相关文章

洛谷题目传送门 AC自动机入门--yyb巨佬的博客 AC自动机入手经典好题(虽然年代久远) 有了fail指针,trie树就不是原来的树型结构了,我们可以把它叫做trie图,由父节点向子节点连的边和fail代表的边构成(都是单向边). 最模板的AC自动机,就是直接匹配字符串.然而这题思维并非如此简单. 来一波逆向思维.假设我们构造出了一个无限长的安全代码,再拿到AC自动机上匹配,会发生什么? 没错,当我们一位一位地匹配的时候,我们会发现,永远都不会跳到某个病毒代码段结尾的位置(以后把这里称作危险节…
洛谷题目链接:[POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例: 例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101-.如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码. 任务: 请写一个程序: 1.在…
P2444 [POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例: 例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101-.如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码. 任务: 请写一个程序: 1.在文…
又打了一遍AC自动稽. 海星. 好像是第一次打trie图,很久以前就听闻这个思想了.OrzYYB~ // It is made by XZZ #include<cstdio> #include<algorithm> #include<cstring> #define il inline #define rg register #define vd void #define sta static typedef long long ll; il int gi(){ rg…
http://www.lydsy.com/JudgeOnline/problem.php?id=2938 https://www.luogu.org/problemnew/show/P2444 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 对于多串,先建立AC自动机. 然后考虑对于没有病毒代码的代码来说,它会在AC自动…
要点 并没问具体方案,说明很可能不是构造. 思考不断读入这个文本串,然后中间不出现某些文法的串.啊,这就是个自动机. 将不合法串使用ac自动机构成一个Trie图,我们需要的字符串就是在这个自动机上无限走路但是却不会撞到危险节点. 这样只要从根开始跑dfs判有环即存在答案. 注意还要加上ac自动机的性质:某节点的fail指针指向的如果是危险的,则它也是危险的."she"的'e'指向"he"的'e',说明she里有he,也是不可走. #include <cstdi…
虽然 NOIp 原地爆炸了,目前进入 AFO 状态,但感觉省选还是要冲一把,所以现在又来开始颓字符串辣 首先先复习一个很早很早就学过但忘记的算法--自动 AC AC自动机. AC 自动机能够在 \(\mathcal O(\sum|s|)\) 的时间内解决多模式串的问题,你可以理解为它把 KMP 放在了 trie 树上. 举个例子,\(S=\{"abc","bcd","cd"\},T="abcdbc"\). 首先建出 trie…
AC自动机 根据已有经验,学完虚数会变虚,然后写出的代码就不是人能看的了 所以我们来学实树罢(喜) 以上为废话博客背景 有限状态自动机 首先我们来了解一下自动机是啥. 说的通俗一点,我们可以把自动机看成一张有向图,有一个点在起始节点.每当你输入一个合法的东西,这个点就会按照一定规则在边上移动.也就是说,你输入一些东西,这个点就会移动到一个确定的地方是不是很自动呢 我们接触到的第一个自动机其实不是AC自动机,而是trie树.大家可以看一看trie树是不是符合上面这些要求. 当然我是认为这个最大的用…
题意 \(n\)个01病毒串,总长不超过\(30000\).问是否存在无限长的不包含病毒串的01串. 分析 考虑ac自动机,如果不包含病毒串而且无限长也就是说存在一个环(转移和fail树),使得环上不含病毒串. 题解 所以我们标记一下病毒串后dfs找环即可. #include <bits/stdc++.h> using namespace std; const int N=30005; int ch[N][2], tot, go[N], vis[N], ins[N], q[N], f[N];…
嗯... 理解生成树的概念: 在一幅图中将所有n个点连接起来的n-1条边所形成的树. 最小生成树: 边权之和最小的生成树. 最小瓶颈生成树: 对于带权图,最大权值最小的生成树. 如何操作? 1.Prim算法(O(mlogn)) 2.Kruskal算法(O(mlogn)) 推荐使用第二种,无需建图. 算法流程: Prim算法:(思想类似dijkstra) 随意选取一个点作为已访问集合的第一个点,并将所有相连的边加入堆中 从堆中找到最小的连接集合内和集合外点的边,将边加入最小生成树中 将集合外点标记…