建AC自动机,把所有病毒的节点都删掉,dfs判有没有环,有环就找得到。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <cstdlib>
  6. #include <algorithm>
  7. #define N 30304
  8.  
  9. using namespace std;
  10.  
  11. int size,root;
  12. int next[N][2],fail[N];
  13. bool safe[N];
  14. int newnode(){
  15. safe[++size]=1;
  16. next[size][0]=next[size][1]=0;
  17. return size;
  18. }
  19. void ins(char *s){
  20. int now=root;
  21. for (int i=0;s[i];++i){
  22. if (!next[now][s[i]-48])
  23. next[now][s[i]-48]=newnode();
  24. now=next[now][s[i]-48];
  25. }
  26. safe[now]=0;
  27. }
  28. int q[N],qh,qt;
  29. void bfs(){
  30. fail[root]=root;
  31. qh=qt=0;
  32. q[++qt]=root;
  33. while (qh<qt){
  34. int u=q[++qh];
  35. for (int i=0;i<2;++i){
  36. int v=next[u][i];
  37. if (!v)
  38. next[u][i]=u!=root?next[fail[u]][i]:root;
  39. else{
  40. fail[v]=u!=root?next[fail[u]][i]:root;
  41. q[++qt]=v;
  42. }
  43. }
  44. safe[u]&=safe[fail[u]];
  45. }
  46. }
  47.  
  48. bool vis[N],found;
  49. bool flag[N];
  50. void dfs(int u){
  51. vis[u]=1;
  52. for (int i=0;i<2;++i){
  53. int v=next[u][i];
  54. if (!safe[v]) continue;
  55. if (vis[v]) found=1;
  56. else dfs(v);
  57. if (found) return;
  58. }
  59. vis[u]=0;
  60. safe[u]=0;
  61. }
  62.  
  63. char s[N];
  64. int main(){
  65. int n;scanf("%d",&n);
  66. size=0;root=newnode();
  67. memset(s,0,sizeof(s));
  68. for (int i=1;i<=n;++i){
  69. scanf("%s",s);
  70. ins(s);
  71. }
  72. bfs();
  73. memset(vis,0,sizeof(vis));
  74. found=0;
  75. dfs(root);
  76. puts(found?"TAK":"NIE");
  77.  
  78. return 0;
  79. }

  

bzoj2938: [Poi2000]病毒的更多相关文章

  1. [bzoj2938][Poi2000]病毒_AC自动机

    病毒 bzoj-2938 Poi-2000 题目大意:给你n个01串,问是否存在一个无限长的01串使得这个01的任意子串都不等于给出的01串. 注释:All_length<=30,000 想法: ...

  2. BZOJ2938: [Poi2000]病毒(AC自动机)

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1678  Solved: 849[Submit][Status][D ...

  3. BZOJ2938 [Poi2000]病毒 和 BZOJ5261 Rhyme

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

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

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

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

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

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

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

  7. BZOJ2938 POI2000病毒

    我们不能让重复过的字串出现在无限串上(就叫这个了...) 也就是要自动机一直能匹配但就是匹配不到,那么就是在自动机上找一个环. dfs判环即可.注意是个有向图. #include<bits/st ...

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

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

  9. 【BZOJ-2938】病毒 Trie图 + 拓扑排序

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

随机推荐

  1. .NET Framework 中的所有类型

    .NET Framework 中的所有类型不是值类型就是引用类型. 值类型是使用对象实际值来表示对象的数据类型. 如果向一个变量分配值类型的实例,则该变量将被赋以该值的全新副本. 引用类型是使用对对象 ...

  2. IntelliJ IDEA运行tomcat项目编码错误, 及如何指定tomcat编码

    刚开始用IDEA, 在跑dubbo开发时, 发现一个很奇怪的问题, 远程调用服务端的方法时, 传入的中文参数会变成GBK编码. 经过好长时间的跟踪终于把问题定位到了IDEA里配置的Tomcat. 凡是 ...

  3. Javascript的ArrayBuffer从Utf8ArrayToString

    由于项目需要,需要从一个已知的ArrayBuffer中读取出字符串,虽然环境是typescript,但最终还是用的js的代码改了一下解决, public Utf8ArrayToStr(array):s ...

  4. Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端

    Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端 目录 前言 OAuth2.0简介 授权模式 (SimpleSSO示例) 使用Microsoft.Owin.Se ...

  5. pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat

    pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat Windows7下pip安装包报错:Microso ...

  6. Linux shell实战(ipcs工具)

    #!/bin/bash -o $# -gt ] then echo "参数个数不正确!" exit - fi WHOAIM=`whoami` function release { ...

  7. React Native中设计主题机制

    昨天和同事讨论组件隔离性的时候讨论到关于默认样式的问题:很多情况下我们希望能够把组件设计为通用的,然后在具体项目中给他们指定一些通用的样式,譬如:背景颜色.默认字体等等.这听起来在CSS下运作起来就很 ...

  8. swift邮箱手机验证

    import UIKit class Validate: NSObject { //邮箱.手机验证 enum ValidatedType { case Email case PhoneNumber } ...

  9. oracle 分组排序函数

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示例和 ...

  10. .NET基于Redis缓存实现单点登录SSO的解决方案

    一.基本概念 最近公司的多个业务系统要统一整合使用同一个登录,这就是我们耳熟能详的单点登录,现在就NET基于Redis缓存实现单点登录做一个简单的分享. 单点登录(Single Sign On),简称 ...