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自动机)相关推荐

  1. BZOJ2938[Poi2000]病毒——AC自动机

    题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...

  2. [BZOJ2938]:[Poi2000]病毒

    题目传送门 题目描述: 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...

  3. BZOJ2938:[POI2000] 病毒

    Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...

  4. 洛谷 - P2444 - 病毒 - AC自动机

    https://www.luogu.org/problemnew/show/P2444 有点恶心,不太明白fail的意义. #include<bits/stdc++.h> using na ...

  5. bzoj2938: [Poi2000]病毒

    被Star_Feel大爷带着做题 明显大力AC机然后找环 本来我一开始想的是先去有另一个病毒为前缀的病毒,结果今天早上写的时候偷懒没写 结果跳fail的时候会跳到中间...无语,Star_Feel大爷 ...

  6. 提高篇 第二部分 字符串算法 第4章 AC自动机

    https://blog.csdn.net/wangyh1008/article/details/81428056 [模板]AC自动机(加强版) 洛谷3796 AC自动机_A_loud_name-CS ...

  7. 【BZOJ2938】病毒,AC自动机练习

    传送门(权限题) 2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 462 Solved: 240 [Submit][S ...

  8. bzoj 2938: [Poi2000]病毒(AC自动机)

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1085  Solved: 541 [Submit][Status] ...

  9. BZOJ2938:[Poi2000]病毒

    BZOJ2938:[Poi2000]病毒 考虑AC自动机匹配的过程 如果下一个节点是危险节点,我们就不跳到这个节点 如果下一个节点的 fail 是危险节点,我们也不跳到这个节点 这个标记在 getfa ...

最新文章

  1. c++大作业迷宫游戏 规定时间内完成_开卷有益 | 小学生做作业磨蹭的7个原因及对策!太准了~不得不为孩子收藏!...
  2. 智慧城市需要百姓智慧
  3. syslinux引导GRUB4DOS
  4. pkl格式数据 训练集_Detectron2训练自己的数据集手把手指导
  5. eclipse占用内存过大_idea被评最好用java开发工具,为什么用eclipse的人更多?
  6. 每日一题(46)—— volatile
  7. 实用必备xp框架模块_两款实用工具类软件,是你的日常必备!
  8. Android-alpha-渐变透明度 动画
  9. 全网唯一C++调用由com组件生成的dll教程
  10. mac sublime java_Mac环境下使用SublimeText写Java代码
  11. 普渡大学计算机科学师生比,公立常春藤高校普渡大学,附申请要求+录取难度!...
  12. 10大协作办公工具:实现团队工作效率最大化
  13. 软件测试面试题:你们公司的测试流程是怎么样的?
  14. android开发隐藏图片,用美图看看安卓版教你如何隐藏私人图片(图文)
  15. 利用python下载fnl数据方法
  16. 探究from表单的身份证号码的校验逻辑 javascript
  17. cos三次方积分_cos三次方的定积分
  18. 状态机实现的三种方法-C语言
  19. vscode配置php开发环境
  20. WBS工作分解结构法,如何细分你的工作

热门文章

  1. XHTML行内描述性元素(持续更新中)
  2. RPM 包相关命令详解
  3. 设计模式[3] -单例模式-代码
  4. Android内核和Linux内核的区别
  5. 优酷开放SDK之setOnTimeOutListener
  6. Struts2返回JSON对象的方法总结
  7. 根据pid判断某个进程是否存在
  8. Eclipse SQLExplorer插件的安装和使用
  9. 事务处理总结【JDBC事务|JTA事务|容器事务
  10. Python3文件操作详解 Python3文件操作大全