Description

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

示例:

例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101…。如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码。

任务:

请写一个程序:

l 读入病毒代码;

l 判断是否存在一个无限长的安全代码;

l 将结果输出


只要trie图上有一个能从0到达且没有结束标记的环,我们就可以在那个环上绕啊绕啊绕啊


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define M 800001
using namespace std; int n,m,k,cnt,d[M][2],a[M],fail[M],e[M];
char c[M];
bool b[M],bl[M];
queue<int>q;
void ins(char* s)
{
int l=strlen(s), now=0;
for(int i=0;i<l;i++)
{
if(!d[now][s[i]-'0']) d[now][s[i]-'0']=++cnt;
now=d[now][s[i]-'0'];
}
e[now]=1;
} void built()
{
if(d[0][0]) q.push(d[0][0]);
if(d[0][1]) q.push(d[0][1]);
while(q.size())
{
int x=q.front(); q.pop();
if(e[fail[x]]) e[x]=1;
if(d[x][0])fail[d[x][0]]=d[fail[x]][0], q.push(d[x][0]);
else d[x][0]=d[fail[x]][0];
if(d[x][1]) fail[d[x][1]]=d[fail[x]][1], q.push(d[x][1]);
else d[x][1]=d[fail[x]][1];
}
} bool bfs(int x)
{
if(e[x]) return 0;
if(bl[x]) return 1;
if(b[x]) return 0;
bl[x]=b[x]=1;
if(bfs(d[x][0])) return 1;
if(bfs(d[x][1])) return 1;
bl[x]=0;
return 0;
} int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%s",c), ins(c);
built();
if(bfs(0)) printf("TAK");
else printf("NIE");
}

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

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

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

  2. BZOJ 2938: [Poi2000]病毒

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

  3. BZOJ 2938 [Poi2000]病毒(AC自动机)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2938 [题目大意] 给出一些病毒串,问是否存在不包含任何病毒串的无限长的字符串 [题解 ...

  4. 【BZOJ】2938: [Poi2000]病毒

    题意 \(n\)个01病毒串,总长不超过\(30000\).问是否存在无限长的不包含病毒串的01串. 分析 考虑ac自动机,如果不包含病毒串而且无限长也就是说存在一个环(转移和fail树),使得环上不 ...

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

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

  6. 【BZOJ】2938 [POI2000]病毒(AC自动机)

    题目 传送门:QWQ 传送到洛谷QWQ 分析 夏爷爷传送门 代码 #include <bits/stdc++.h> using namespace std; ; ][], fail[N*] ...

  7. BZOJ 2938 [POI2000]病毒 (剪枝/A*迭代搜索)

    LOJ BZOJ 题目大意:给你一些模式串,问是否存在一个无限长的文本串,不包含任何一个给定的模式串 并没有想到去模拟合法的文本串在模式串的Trie图上匹配的过程..我好菜啊 如果一个字符串合法,那么 ...

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

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

  9. BZOJ_2938_[Poi2000]病毒_AC自动机

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

随机推荐

  1. IBatis项目中com.ibatis.common.xml.NodeletException的解决方案

    一 现象: 今天在写IBatis项目是总是提示我有如下异常: com.ibatis.common.xml.NodeletException java.util.NoSuchElementExcepti ...

  2. HDFS要点剖析

    谈到大数据,不得不提的一个名词是"HDFS".它是一种分布式文件存储系统,其系统架构图如下图所示: 从图中可以了解到的几个关键概念 元数据(MetaData) 机架(Rock) 块 ...

  3. Python手写模拟单向链表对象,栈对象和树

    单向链表: class error(Exception): def __init__(self,msg): super(error,self).__init__() self.msg=msg def ...

  4. js-权威指南学习笔记14

    第十四章 Window对象 1.Document对象有一个URL属性,是文档首次载入后保存该文档的URL的静态字符串.如果定位到文档中的片段标识符,Location对象会做对应的更新,而documen ...

  5. JS基础(二)

    21.标准事件模型的事件类型(包括4个子模块) HTMLEvents:接口为Event,支持的事件类型包括abort.blur.change.error.focus.load.resize.scrol ...

  6. JS(微信小程序)处理银行卡号

    其实这是一个小程序的项目,但是JS还是那个JS 在本项目中要实现两种效果: 每隔四位插入空格: <view class='item_list'> <label>银行卡号:< ...

  7. OpenLDAP权限配置

    安装好了openldap之后,就是对它进行配置了,其中一项就是设置访问控制,限制普通用户只能修改/访问他们能修改/访问的项.这就是ACL需要做的事情. 设置方法 1.可以将 include行放在/et ...

  8. 【转】grep -v grep

    1.grep 是查找含有指定文本行的意思,比如grep test 就是查找含有test的文本的行 2.grep -v 是反向查找的意思,比如 grep -v grep 就是查找不含有 grep 字段的 ...

  9. 读书笔记week1——涂涵越

    这次读书笔记主要是就<程序员修炼之道>这本书的前半部分做一些总结以及发表一些自己的看法. 本书前面的一部分主要是一些程序员应该在工作中时刻注意的事情,一些关键的信息如下: 1.处理问题的态 ...

  10. Array类型

    Array类型 Array也是ECMAScript中常用类型之一,其特点是数组中的每一项都可以保存任何类型的数据,数组的大小可以动态调整. 创建数组 方式1:使用Array构造函数 var books ...