BZOJ2938: [Poi2000]病毒(AC自动机)
Orz wlp 5min讲完后缀数组
题意
给出$n$个0, 1串
问是否可以构造出一个无限长的字符串使其不包含任意串
Sol
刚开始我试图假装自己不知道这是个AC自动机的题然后来做。发现根本不可能qwq。
如果知道这题可以用AC自动机的话就好做很多了吧。
考虑我们构造的串中哪些子串不能出现。
1、给出的这$n$个串显然不能出现—>本身
2、包含这个$n$个串的串显然不能出现—> fail树
因此我们在每个串结束的地方打上标记,同时如果一个串的fail树上任意节点被打过标记,那么这个节点一定是不能访问的。
那最后怎么统计答案呢?
考虑无限长的串一定可以被表示成某个串repeat~repeat~repeat~
所以我们从根节点开始,判断是否能形成环就行了。
10min写完没调1Ahhh
#include<cstdio> #include<queue> #include<cstring> #include<cstdlib> using namespace std; const int MAXN = 1e6 + 10, B = 2; int N; int ch[MAXN][2], fa[MAXN], fail[MAXN], flag[MAXN], tot = 0, root = 0; char s[MAXN]; void insert(char *s) {int N = strlen(s + 1), now = root;for(int i = 1; i <= N; i++) {int nxt = s[i] - '0';if(!ch[now][nxt]) ch[now][nxt] = ++tot;now = ch[now][nxt];}flag[now] = 1; } void GetFail() {queue<int> q;for(int i = 0; i < B ;i++) if(ch[root][i])fail[ch[root][i]] = root, q.push(ch[root][i]);while(!q.empty()) {int p = q.front(); q.pop();for(int i = 0; i < B; i++) {if(ch[p][i]) fail[ch[p][i]] = ch[fail[p]][i], flag[ch[p][i]] |= flag[fail[ch[p][i]]], q.push(ch[p][i]);else ch[p][i] = ch[fail[p]][i];}} } int f[MAXN], vis[MAXN]; void dfs(int x) {f[x] = 1;for(int i = 0; i < B; i++) {if(f[ch[x][i]] == 1) {puts("TAK"); exit(0);}else if(!flag[ch[x][i]] && f[ch[x][i]] != 2) dfs(ch[x][i]);}f[x] = 2; } int main() {scanf("%d", &N);for(int i = 1; i <= N; i++) {scanf("%s", s + 1);insert(s);}GetFail();dfs(root);puts("NIE");return 0; } /* 3 011 11 00000*/
BZOJ2938: [Poi2000]病毒(AC自动机)相关推荐
- BZOJ2938[Poi2000]病毒——AC自动机
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
- [BZOJ2938]:[Poi2000]病毒
题目传送门 题目描述: 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
- BZOJ2938:[POI2000] 病毒
Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
- 洛谷 - P2444 - 病毒 - AC自动机
https://www.luogu.org/problemnew/show/P2444 有点恶心,不太明白fail的意义. #include<bits/stdc++.h> using na ...
- bzoj2938: [Poi2000]病毒
被Star_Feel大爷带着做题 明显大力AC机然后找环 本来我一开始想的是先去有另一个病毒为前缀的病毒,结果今天早上写的时候偷懒没写 结果跳fail的时候会跳到中间...无语,Star_Feel大爷 ...
- 提高篇 第二部分 字符串算法 第4章 AC自动机
https://blog.csdn.net/wangyh1008/article/details/81428056 [模板]AC自动机(加强版) 洛谷3796 AC自动机_A_loud_name-CS ...
- 【BZOJ2938】病毒,AC自动机练习
传送门(权限题) 2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 462 Solved: 240 [Submit][S ...
- bzoj 2938: [Poi2000]病毒(AC自动机)
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1085 Solved: 541 [Submit][Status] ...
- BZOJ2938:[Poi2000]病毒
BZOJ2938:[Poi2000]病毒 考虑AC自动机匹配的过程 如果下一个节点是危险节点,我们就不跳到这个节点 如果下一个节点的 fail 是危险节点,我们也不跳到这个节点 这个标记在 getfa ...
最新文章
- c++大作业迷宫游戏 规定时间内完成_开卷有益 | 小学生做作业磨蹭的7个原因及对策!太准了~不得不为孩子收藏!...
- 智慧城市需要百姓智慧
- syslinux引导GRUB4DOS
- pkl格式数据 训练集_Detectron2训练自己的数据集手把手指导
- eclipse占用内存过大_idea被评最好用java开发工具,为什么用eclipse的人更多?
- 每日一题(46)—— volatile
- 实用必备xp框架模块_两款实用工具类软件,是你的日常必备!
- Android-alpha-渐变透明度 动画
- 全网唯一C++调用由com组件生成的dll教程
- mac sublime java_Mac环境下使用SublimeText写Java代码
- 普渡大学计算机科学师生比,公立常春藤高校普渡大学,附申请要求+录取难度!...
- 10大协作办公工具:实现团队工作效率最大化
- 软件测试面试题:你们公司的测试流程是怎么样的?
- android开发隐藏图片,用美图看看安卓版教你如何隐藏私人图片(图文)
- 利用python下载fnl数据方法
- 探究from表单的身份证号码的校验逻辑 javascript
- cos三次方积分_cos三次方的定积分
- 状态机实现的三种方法-C语言
- vscode配置php开发环境
- WBS工作分解结构法,如何细分你的工作