2021.11.10 [POI2000]病毒(AC自动机)】的更多相关文章

2021.11.10 [POI2000]病毒(AC自动机) https://www.luogu.com.cn/problem/P2444 题意: 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例: 例如如果 {011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是 010101 -.如果 {01…
[POI2000]病毒 题目描述: 二进制病毒审查委员会最近发现了如下的规律: 某些确定的二进制串是病毒的代码. 如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的. 现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例:如果{011, 11, 00000}为病毒代码段, 那么一个可能的无限长安全代码就是010101…. 如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码. 任务:请写一个程序: 读入病毒代码,判…
[BZOJ2938][Poi2000]病毒 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例: 例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101….如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码. 任务: 请…
2938: [Poi2000]病毒 题意:判断是否存在无限长的不含模式串的字符串.只有01. 建出套路DP的转移图,判断有环就行了 练习一下拓扑排序 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int N=3e4+5; typedef long lo…
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例: 例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101….如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码. 任务: 请写一个程序: l         读入病毒代码: l   …
Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例: 例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101….如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码. 任务: 请写一个程序: l         读入病毒代…
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例: 例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101….如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码. 任务: 请写一个程序: l 读入病毒代码: l 判断是否存在一个无限…
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define maxn 40000 #define N 2 using namespace std; char str[maxn]; queue<int>Q; int ch[maxn][3], tag[maxn], f[maxn], vis[maxn], done[maxn]; int tot,r…
题目链接 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例: 例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101-.如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码. 任务: 请写一个程序: 1.在文本文件WIR.IN中读入病…
P2444 [POI2000]病毒 #include <bits/stdc++.h> using namespace std; ; struct Aho_Corasock_Automaton { struct node { int fail; // 失配指针 ]; // 子节点的位置 bool danger; // 危险标记 }Trie[maxn]; ; // Trie指针 void insert(char *s) { int len = strlen(s); ; // Trie当前指针 ;…
题目链接 \(Description\) 给n个模式串,问是否存在长度无限的主串,使得任何一个模式串都没有在主串中出现. \(Solution\) 先建AC自动机. 假设我们有了一个无限长的安全代码,然后在AC自动机上匹配应该发生什么? 应该是匹配到一个位置失败跳回去,之后要再匹配到这个位置(必须跳回当前链)再失败跳回去.跳回去就是通过fail指针. Trie树上连上fail指针的边后(其实就是Build时改的son),如果能在这个有向图上找到环,就TAK. 或者,安全代码无限长的话前后要能拼起…
2021.11.10 P5231 [JSOI2012]玄武密码(AC自动机) https://www.luogu.com.cn/problem/P5231 题意: 给出字符串S和若干T,求S与每个T的最长公共前缀. 分析: 建AC自动机之后对于S每个出现的位置i以及fail[t[u][i]]打上标记,继续寻找i=fail[i]直到i>0,然后对每个T单独寻找,从0到strlen(T)-1如果有标记,更新ans. 代码如下: #include<cstdio> #include<ios…
BZOJ_2938_[Poi2000]病毒_AC自动机 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例: 例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101….如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码.…
2021.11.10 fail树 https://blog.csdn.net/niiick/article/details/87947160 1. AC自动机与fail树的神奇关系 1.1 AC自动机 匹配一个文本字符串S,从i开始,一步一步向fail[i]跳,直到根,每匹配一次最多转跳m个T(假设一共有m个T),时间复杂度最大是 \(O(m^2)\),建树的复杂度为 \(O(n)\). 对于Luogu P5357https://www.luogu.com.cn/problquanzhiem/P…
◇学时·10 & 模板·3◇ AC自动机 跟着高中上课……讲AC自动机的扩展运用.然而连KMP.trie字典树都不怎么会用的我一脸懵逼<(_ _)> 花一上午自学了一下AC自动机 QwQ ◦ Trie树 字典树的一种(听说还有其他字典树,不清楚).每个节点代表一个字母,根节点相当于超级源点,根节点不表示字母.Trie树最大的特点是从根节点出发,沿着树边向下走,走过的节点会形成一个字符串.而一些节点是某一个单词的结尾,对于这种节点,我们一般会给它做一个标记(ovr). ▪ 构建Trie树…
问题描述 LG2444 BZOJ2938 I \(\mathrm{AC}\)自动机 \(\mathrm{AC}\)自动机是一种多模式串匹配算法,本萌新今天刚学了它qwq 约定在构造\(\mathrm{AC}\)自动机的过程中,\(\mathrm{Trie}\)树上的边和由于\(\mathrm{AC}\)自动机中这一句: else ch[x][i]=ch[fail[x]][i]; 所新建的边为实边. 也就是\(x\)到\(ch[x][0]\)和\(ch[x][1]\)的边为实边. II 危险! 什…
链接 : Here! 背景 : 开始我同学是用 AC自动机 + DP 的方法来做这道题, 这道题的标签是 AC自动机, 动态规划, 矩阵, 按道理来说 AC自动机 + DP 应该是能过的, 但是他不幸的 $T$ 了, $QAQ$, 后来神犇Hug给我们提供了一个思路!!! 思路 : 题目要求是 "如果其中两个或者两个以上的 $DNA$ 序列是一个 $DNA$ 序列 $A$ 的子串,那么 $DNA$ 序列 $A$ 是疑似病毒的 $DNA$ 序列", 那么也就是说字符串 $A$, 它要是能…
病毒 bzoj-2938 Poi-2000 题目大意:给你n个01串,问是否存在一个无限长的01串使得这个01的任意子串都不等于给出的01串. 注释:All_length<=30,000 想法:裸题,介绍一下AC自动机. 什么是AC自动机?简单讲,就是Trie+KMP.KMP就是单模字符串匹配算法,基于next数组求出最长前缀后缀,增加匹配效率.多模匹配,就是好几个字符串之间匹配是否出现过或有什么性质等.这样效率太低,我们就把它们都扔到Trie树上.然后引进fail指针,就相当于next. 附上…
0. 写在前面 本文记录了一个AC自动机的诞生! 之前看过有人用C++写过AC自动机,也有用C#写的,还有一个用nodejs写的.. C# 逆袭--自制日刷千题的AC自动机攻克HDU OJ HDU 自动刷题机 Auto AC (轻轻松松进入HDU首页) 手把手教你用C++ 写ACM自动刷题神器(冲入HDU首页) 感觉他们的代码过于冗长,而且AC率也不是很理想. 刚好在回宿舍的路上和学弟聊起这个事 随意想了想思路,觉得还是蛮简单的,就顺手写了一个,效果,还可以接受. 先上个图吧: 最后应该还可以继…
题目传送门 思路: 要求构建一个字符串,使得这个字符串不包含给出的任意一个单词. 如果我们已经构建出了一个安全代码,放在ac自动机上跑,那么我们必定不能得到任何一个字符串,此时我们得到的fail指针必定是在一个环上循环,并且这个环不包含单词的末尾. 我们也知道fail指针最后是会指回0点的,那么此时我们其实就是要求一个环,这个换不包含单词末尾即可.加一个优化就是,如果fail指针指向的地方是末尾,那么这个地方等同于末尾. #include<bits/stdc++.h> #define clr(…
https://www.luogu.org/problemnew/show/P2444 有点恶心,不太明白fail的意义. #include<bits/stdc++.h> using namespace std; #define ll long long struct Trie{ ][],fail[],End[]; int root,L; int newnode(){ /*for(int i=0;i<26;i++) nex[L][i]=-1;*/ End[L++]=; ; } int c…
题目:https://www.luogu.org/problemnew/show/P2444 AC自动机上 dfs,不走结尾点,如果走出环就是有无限长度的串: RE无数,原来是数组开成 2000 的了... 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; ,xm=…
题意 : 给出一些病毒串,问你由ATGC构成的长度为 n 且不包含这些病毒串的个数有多少个 分析 : 这题搞了我真特么久啊,首先你需要知道的前置技能包括 AC自动机.构建Trie图.矩阵快速幂,其中矩阵快速幂和AC自动机可能都熟悉,但是这题为什么和矩阵有关系?Trie图是什么呢?好像只听说过Trie树啊!下面我慢慢展开,首先声明本人水平实在实在有限,理解错误的地方请批评指证,万分感激! 与矩阵的联系( 你可能需要百度.... ) ==> 解决此题就要先了解到如何用矩阵去解决 求从A点到B点刚好经…
Description 不稳定的传送门 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次.单词个数<=200,单词总长度<=10^6 Solution AC自动机的入门题,将所有单词建一颗字典树,并构造fail树 然后随便统计一下数量就可以了 Code #include <cstdio> #include <algorithm> #include <cstring> #define R re…
2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1678  Solved: 849[Submit][Status][Discuss] Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例: 例如如果{011, 11,…
2021.11.11 P4052 [JSOI2007]文本生成器(AC自动机+DP) https://www.luogu.com.cn/problem/P4052 题意: JSOI 交给队员 ZYX 一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是 GW 文本生成器 v6 版. 该软件可以随机生成一些文章--总是生成一篇长度固定且完全随机的文章. 也就是说,生成的文章中每个字符都是完全随机的.如果一篇文章中至少包含使用者们了解的一个单词,…
2021.11.09 P4824 [USACO15FEB]Censoring S与P3121 [USACO15FEB]Censoring G(KMP&&AC自动机) https://www.luogu.com.cn/problem/P4824 题意: 给定字符串S和T,删除S中的T,形成新串,继续删除新串中的T,直至完全删除. 分析: KMP求的是当前S的第i位能匹配到T的第j位,如果j==strlen(T)删除stacki中i-strlen(T)+1~i,继续从S的i+1.k=f[sta…
2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机) https://www.luogu.com.cn/problem/P2292 题意: 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章 TT 是由若干小写字母构成.一个单词 WW 也是由若干小写字母构成.一个字典 DD 是若干个单词的集合.我们称一段文章 TT 在某个字典 DD 下是可以被理解的,是指如果文章 TT 可以被分成若干部分,且每一个部分都…
洛谷题目传送门 AC自动机入门--yyb巨佬的博客 AC自动机入手经典好题(虽然年代久远) 有了fail指针,trie树就不是原来的树型结构了,我们可以把它叫做trie图,由父节点向子节点连的边和fail代表的边构成(都是单向边). 最模板的AC自动机,就是直接匹配字符串.然而这题思维并非如此简单. 来一波逆向思维.假设我们构造出了一个无限长的安全代码,再拿到AC自动机上匹配,会发生什么? 没错,当我们一位一位地匹配的时候,我们会发现,永远都不会跳到某个病毒代码段结尾的位置(以后把这里称作危险节…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2938 [题目大意] 给出一些病毒串,问是否存在不包含任何病毒串的无限长的字符串 [题解] 首先我们对病毒串建立AC自动机,如果我们能够在AC自动机上无限跑但是不成功匹配, 说明就存在这样的安全串,我们在AC自动机上做搜索, 若存在不经过match的环,那就是TAK,否则就是NIE. [代码] #include <cstdio> #include <algorithm>…