题意

给定多个01模式串,问是否存在一个无限长的字符串不包含任何一个模式串。

分析

  • 好像数据有点水,网上一大堆题解连样例都没过???
  • 多模式串,先把AC自动机建出来再说。
  • 反向考虑,若存在一个无限长的字符串不包含任何一个模式串,那就说明这个字符串可以在AC自动机上无限匹配,所以我们在AC自动机上dfs找环即可。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+50;
bool flag;
struct ACM{
int tr[N][2],val[N],fail[N],cnt,x[N],vis[N];
void init(){
memset(tr,0,sizeof(tr));
memset(val,0,sizeof(val));
memset(fail,0,sizeof(fail));
}
void insert(char *s){
int len=strlen(s);
int now=0;
for(int i=0;i<len;i++){
int id=s[i]-'0';
if(!tr[now][id]){
tr[now][id]=++cnt;
}
now=tr[now][id];
}
val[now]++;
x[now]++;
}
void build(){
queue<int> q;
for(int i=0;i<2;i++){
if(tr[0][i]){
q.push(tr[0][i]);
fail[tr[0][i]]=0;
}
}
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=0;i<2;i++){
if(tr[u][i]){
fail[tr[u][i]]=tr[fail[u]][i];
x[tr[u][i]]+=x[tr[fail[u]][i]];
q.push(tr[u][i]);
}else{
tr[u][i]=tr[fail[u]][i];
}
}
}
}
void dfs(int u){
if(flag){
return;
}
vis[u]=0;
for(int i=0;i<2;i++){
int v=tr[u][i];
if(x[v]){
continue;
}
if(vis[v]==-1){
dfs(v);
}else if(vis[v]==0){
flag=true;
}
}
vis[u]=1;
}
void solve(){
memset(vis,-1,sizeof(vis));
dfs(0);
}
}ac;
int n;
char s[N];
int main(){
freopen("in.txt","r",stdin);
scanf("%d",&n);
ac.init();
for(int i=0;i<n;i++){
scanf("%s",s);
ac.insert(s);
}
ac.build();
ac.solve();
if(flag){
printf("TAK\n");
}else{
printf("NIE\n");
}
return 0;
}

luoguP2444_[POI2000]病毒的更多相关文章

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

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

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

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

  3. P2444 [POI2000]病毒

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

  4. BZOJ 2938: [Poi2000]病毒

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

  5. [洛谷P2444] [POI2000]病毒

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

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

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

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

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

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

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

  9. 洛谷 P2444 [POI2000]病毒 解题报告

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

随机推荐

  1. form 利用BeginCollectionItem提交集合List<T>数据 以及提交的集合中含有集合的数据类型 如List<List<T>> 数据的解决方案

    例子: public class IssArgs { public List<IssTabArgs> Tabs { get; set; } } public class IssTabArg ...

  2. CF356E - Xenia and String Problem

    也许更好的阅读体验 \(\mathcal{Description}\) 定义一种字符串\(gray\)串满足: 长度为奇数 正中间的字母只出现一次 左右两端相同,左右两端也是gray串 一个\(gra ...

  3. Kafka API操作

    Kafka API实战 环境准备 在eclipse中创建一个java工程 在工程的根目录创建一个lib文件夹 解压kafka安装包,将安装包libs目录下的jar包拷贝到工程的lib目录下,并buil ...

  4. python课堂整理11---函数即变量

    一.前向引用 函数即是变量,在调用前要先定义好. def bar(): print('from bar') def foo(): print('from foo') bar() foo() def f ...

  5. 正则与sed,grep,awk三剑客

    系统登录顺序: /etc/profile /etc/profile.d/a.sh (a.sh自己建的) /root/.bash_profile /root/.bashrc /etc/bashrc /b ...

  6. WebGL着色器32位浮点数精度损失问题

    问题 WebGL浮点数精度最大的问题是就是因为js是64位精度的,js往着色器里面穿的时候只能是32位浮点数,有效数是8位,精度丢失比较严重. 这篇文章里讲了一些处理方式,但是视坐标这种方式放在我们的 ...

  7. 【iOS】沙盒目录

    有关沙盒目录参考: http://blog.csdn.net/totogo2010/article/details/7669837 获取沙盒路径,参考代码: NSArray *paths = NSSe ...

  8. 并发栅栏CyclicBarrier---简单问2

    并发栅栏CyclicBarrier---简单问 背景:前几天在网上看到关于Java并发包java.concurrent中一个连环炮的面试题,整理下以备不时之需. CyclicBarrier简介: 栅栏 ...

  9. web渗透---第一天

    了解黑客     黑客: 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现, 灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是 出现了“骇客”与黑客”分家. 黑客:Hacker 骇 ...

  10. spring学习笔记之---bean属性注入

    bean属性注入 (一)构造方法的属性注入 1.Student.java package entity; public class Student { private String name; pri ...