【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=2938

【题目大意】

  给出一些病毒串,问是否存在不包含任何病毒串的无限长的字符串

【题解】

  首先我们对病毒串建立AC自动机,如果我们能够在AC自动机上无限跑但是不成功匹配,
  说明就存在这样的安全串,我们在AC自动机上做搜索,
  若存在不经过match的环,那就是TAK,否则就是NIE。

【代码】

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cstring>
  4. using namespace std;
  5. const int N=30010;
  6. namespace AC_DFA{
  7. const int Csize=2;
  8. int tot,son[N][Csize],sum[N],fail[N],q[N],match[N];
  9. void Initialize(){
  10. memset(match,0,sizeof(int)*(tot+1));
  11. memset(fail,0,sizeof(int)*(tot+1));
  12. for(int i=0;i<=tot;i++)for(int j=0;j<Csize;j++)son[i][j]=0;
  13. tot=0; fail[0]=-1;
  14. }
  15. inline int Tr(char ch){return ch-'0';}
  16. int Insert(char *s){
  17. int x=0;
  18. for(int l=strlen(s),i=0,w;i<l;i++){
  19. if(!son[x][w=Tr(s[i])]){
  20. son[x][w]=++tot;
  21. }x=son[x][w];
  22. }sum[x]++;
  23. return x;
  24. }
  25. void MakeFail(){
  26. int h=1,t=0,i,j,x=0;
  27. for(i=0;i<Csize;i++)if(son[0][i])q[++t]=son[0][i];
  28. while(h<=t)for(x=q[h++],i=0;i<Csize;i++)
  29. if(son[x][i]){
  30. fail[son[x][i]]=son[fail[x]][i],q[++t]=son[x][i];
  31. match[son[x][i]]=sum[son[x][i]]?son[x][i]:match[fail[son[x][i]]];
  32. }else son[x][i]=son[fail[x]][i];
  33. }
  34. }
  35. using namespace AC_DFA;
  36. int inq[N],vis[N];
  37. bool dfs(int x){
  38. inq[x]=1;
  39. for(int i=0;i<Csize;i++){
  40. int y=son[x][i];
  41. if(inq[y])return 1;
  42. if(vis[y]||match[y])continue;
  43. vis[y]=1;
  44. if(dfs(y))return 1;
  45. }inq[x]=0;
  46. return 0;
  47. }
  48. int n;
  49. char s[N];
  50. int main(){
  51. Initialize();
  52. scanf("%d",&n);
  53. for(int i=1;i<=n;i++){
  54. scanf("%s",s);
  55. Insert(s);
  56. }MakeFail();
  57. if(dfs(0))puts("TAK");
  58. else puts("NIE");
  59. return 0;
  60. }

BZOJ 2938 [Poi2000]病毒(AC自动机)的更多相关文章

  1. BZOJ 2938: [Poi2000]病毒 [AC自动机 拓扑排序]

    2938: [Poi2000]病毒 题意:判断是否存在无限长的不含模式串的字符串.只有01. 建出套路DP的转移图,判断有环就行了 练习一下拓扑排序 #include <iostream> ...

  2. BZOJ.2938.[POI2000]病毒(AC自动机)

    题目链接 \(Description\) 给n个模式串,问是否存在长度无限的主串,使得任何一个模式串都没有在主串中出现. \(Solution\) 先建AC自动机. 假设我们有了一个无限长的安全代码, ...

  3. BZOJ 2938: [Poi2000]病毒

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 693  Solved: 360[Submit][Status][Di ...

  4. BZOJ [Poi2000]病毒 AC自动机_DFS_细节

    Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...

  5. [POI2000]病毒 --- AC自动机

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

  6. 【BZOJ2938】[Poi2000]病毒 AC自动机+DFS

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

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

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

  8. BZOJ2938:[POI2000]病毒(AC自动机)

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

  9. 【bzoj2938】[Poi2000]病毒 AC自动机

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

随机推荐

  1. 【BZOJ】4596: [Shoi2016]黑暗前的幻想乡

    [题意]给定n个点的无向完全图,有n-1个公司各自分管一部分路,要求所有公司都有修路的生成树数.n<=17. [算法]容斥原理+生成树计数(矩阵树定理) [题解]每个生成树方案是一个公司有无修路 ...

  2. laravel artisan 工具心得

    介绍一些非常好用的命令: 1.创建一个Eloquent模型:顺便创建一个对应的数据库表 php artisan make:model --migration Models/Admin/test 2.将 ...

  3. [NOIP2003]栈 题解(卡特兰数)

    [NOIP2003]栈 Description 宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n(图示为1到3的情况),栈A的深度大于n. 现在可以进行两种操作: 1.将一个数,从操作数序 ...

  4. 【Windows使用笔记】神舟笔记本的control center

    首先,神船大法好. 然后,因为我的船风扇声音有点大啊,在实验室感觉就很吵,但是它的背板温度又不是很高,所以想设置下风扇的启动. 所以需要用到神船自带的control center软件. 长这样. 应该 ...

  5. python基础===基于cv2的播放器

    import cv2 import threading import win32gui,win32con class Producer(threading.Thread): ""& ...

  6. UVA题解三

    UVA题解三 UVA 127 题目描述:\(52\)张扑克牌排成一列,如果一张牌的花色或者数字与左边第一列的最上面的牌相同,则将这张牌移到左边第一列的最上面,如果一张牌的花色或者数字与左边第三列的最上 ...

  7. python的sorted函数对字典按value进行排序

    场景:词频统计时候,我们往往要对频率进行排序 sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数.其中iterable表示可 ...

  8. html基础-css-选择器

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. /bin、/sbin、/usr/bin、/usr/sbin目录Linux执行文档的区别

    /bin./sbin./usr/bin./usr/sbin目录的区别   在linux下我们经常用到的四个应用程序的目录是/bin./sbin./usr/bin./usr/sbin .而四者存放的文件 ...

  10. WP主题模板制作修改教程

    WP主题模板制作修改教程 实际上,当我们打开某个主题的文件夹时,看到的并不止这两个文件,而是更多.但一般来说,在一个完整的 WP 主题文件夹中都应该包含下列文件(也称为模板文件):页面 模板文件 用途 ...