Description

二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码。
示例:
例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101…。如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码。
任务:
请写一个程序:
l         读入病毒代码;
l         判断是否存在一个无限长的安全代码;
l         将结果输出

Input

 
第一行包括一个整数n,表示病毒代码段的数目。以下的n行每一行都包括一个非空的01字符串——就是一个病毒代码段。所有病毒代码段的总长度不超过30000。

Output

你应在在文本文件WIN.OUT的第一行输出一个单词:
l         TAK——假如存在这样的代码;
l         NIE——如果不存在。

Sample Input

3
01
11
00000

Sample Output

NIE
/*
建立AC自动机,在不能走每个单词最后一个字母的前提下,如果某个字符串在自动机上无法匹配,
则说明可以找到无限长的字符串。
为了方便起见,将所有的point指针合并,最后在自动机上搜索就行了。
*/
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define N 30010
using namespace std;
int a[N][],point[N],danger[N],ins[N],vis[N],n,size=;
char s[N];
queue<int> q;
void insert(){
int len=strlen(s),now=;
for(int i=;i<len;i++){
int t=s[i]-'';
if(!a[now][t]) a[now][t]=++size;
now=a[now][t];
}
danger[now]=;
}
void build(){
q.push();point[]=;
while(!q.empty()){
int now=q.front();q.pop();
for(int i=;i<;i++){
if(!a[now][i]){
a[now][i]=a[point[now]][i];
continue;
}
int k=point[now];
while(!a[k][i]) k=point[k];
point[a[now][i]]=a[k][i];
danger[a[now][i]]|=danger[point[a[now][i]]];
q.push(a[now][i]);
}
}
}
bool dfs(int x){
ins[x]=;
for(int i=;i<;i++){
if(ins[a[x][i]]) return true;
if(vis[a[x][i]]||danger[a[x][i]]) continue;
vis[a[x][i]]=;
if(dfs(a[x][i])) return true;
}
ins[x]=;
return false;
}
int main(){
scanf("%d",&n);
for(int i=;i<;i++) a[][i]=;
for(int i=;i<=n;i++){
scanf("%s",s);
insert();
}
build();
if(dfs()) printf("TAK");
else printf("NIE");
return ;
}

病毒(bzoj 2938)的更多相关文章

  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]病毒 (剪枝/A*迭代搜索)

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

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

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

  6. bzoj 2938

    收获: 1.AC自动机可以在建立fail时将一些不存在的儿子指针指向对应的位置. 2.判断环时不要想当然地写个这样的版本: bool dfs( int u ) { if( vis[u] ) retur ...

  7. bzoj 2938 AC自动机

    根据题意建出trie图,代表单词的点不能走,直接或间接指向它的点也不能走.这样的话如果能在图中找到一个环的话就是TAK,否则是NIE. #include<iostream> #includ ...

  8. bzoj 2938 AC自动机 + dfs判环

    #include<bits/stdc++.h> #define LL long long #define ll long long #define fi first #define se ...

  9. 蓝书2.4 AC自动机

    T1 玄武密码 bzoj 4327 题目大意: 一些字符串 求这些字符串的前缀在母串上的最大匹配长度是多少 思路: 对于所有串建立AC自动机 拿母串在自动机上匹配 对所有点打标记 以及对他们的fail ...

随机推荐

  1. Linux运维笔记--第一部

                                 CentOS 学习总结                                                             ...

  2. sql where in字符串问题

    在pycharm中执行 select * from value in(1,2); 会提醒: No statement found under the caret. Execute all statem ...

  3. NOIP2018

    非常糟糕.从未意识到过考场debuff这么严重. 果不其然,高档选手强如txc实力AK:而像我这样的中档选手就是重在考场发挥和自我调整了吧. 究竟要付出多少代价才能领会一个教训 看来要尝试更自闭一点

  4. Tarjan算法 详解+心得

    Tarjan算法是由Robert Tarjan(罗伯特·塔扬,不知有几位大神读对过这个名字) 发明的求有向图中强连通分量的算法. 预备知识:有向图,强连通. 有向图:由有向边的构成的图.需要注意的是这 ...

  5. Spring Security和Shiro的比较和使用

    https://blog.csdn.net/it_java_shuai/article/details/78054951 Spring Security和Shiro的比较和使用 2017年09月21日 ...

  6. React 基础知识总结

    data-id="1190000016885142" data-license=""> 一.Node.js Node.js并不是一个JavaScript框 ...

  7. 多本Python极速入门最佳书籍,不可错过的Python学习资料!

    Python作为现在很热门的一门编程语言,介于Python的友好,许多的初学者都将其作为首选,为了帮助大家更好的学习Python,我筛选了2年内优秀的python书籍,个别经典的书籍扩展到5年内.   ...

  8. Linux学习-systemctl 针对 timer 的配置文件

    如何使用 systemd 内建的 time 来处理各种任务呢? systemd.timer 的优势 在 archlinux 的官网 wiki 上面有提到,为啥要使用 systemd.timer 呢? ...

  9. HDU 4605 Magic Ball Game 主席树

    题意: 给一棵\(n(1 \leq n \leq 10^5)\)个节点的二叉树,除叶子节点外,每个点都有左儿子和右儿子. 每个点上都有一个权值. 游戏规则是这样的:在根节点放一个权值为\(X\)的小球 ...

  10. Mac 之 STF 搭建(淘宝源安装)

    参考链接:https://www.jianshu.com/p/5fe8cb7d214f (MAC直接安装STF)https://www.jianshu.com/p/c5c298486dbd(homeb ...