[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=2938

[算法]

首先建出给定字符串集的AC自动机

存在无限长的代码当且仅当 : AC自动机上存在一个环且环上没有危险节点

时间复杂度 : O(N)

[代码]

#include<bits/stdc++.h>
using namespace std;
#define MAXP 300010
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull; int n;
char s[MAXP]; struct AC_Automation
{
int sz , rt , timer;
int fail[MAXP];
bool danger[MAXP] , vis[MAXP] , ins[MAXP];
int child[MAXP][];
inline void init()
{
timer = ;
sz = ;
rt = newnode();
}
inline void chkmin(int &x , int y)
{
x = min(x , y);
}
inline int newnode()
{
++sz;
child[sz][] = child[sz][] = -;
fail[sz] = danger[sz] = ;
return sz;
}
inline void insert(char *s)
{
int now = rt;
for (int i = ; i <= strlen(s + ); i++)
{
int nxt = s[i] - '';
if (child[now][nxt] == -) child[now][nxt] = newnode();
now = child[now][nxt];
}
danger[now] = ;
}
inline void rebuild()
{
queue< int > q;
fail[rt] = rt;
for (int i = ; i < ; i++)
{
if (child[rt][i] == -)
child[rt][i] = rt;
else
{
fail[child[rt][i]] = rt;
q.push(child[rt][i]);
}
}
while (!q.empty())
{
int cur = q.front();
q.pop();
for (int i = ; i < ; i++)
{
if (child[cur][i] == -)
child[cur][i] = child[fail[cur]][i];
else
{
fail[child[cur][i]] = child[fail[cur]][i];
danger[child[cur][i]] |= danger[fail[child[cur][i]]];
q.push(child[cur][i]);
}
}
}
}
inline void solve(int now)
{
if (ins[now])
{
printf("TAK\n");
exit();
}
if (vis[now] || danger[now]) return;
vis[now] = ins[now] = ;
if (child[now][] != -) solve(child[now][]);
if (child[now][] != -) solve(child[now][]);
ins[now] = ;
}
} ACAM; template <typename T> inline void chkmin(T &x , T y) { x = min(x , y); }
template <typename T> inline void chkmax(T &x , T y) { x = max(x , y); }
template <typename T> inline void read(T &x)
{
T f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
} int main()
{ scanf("%d" , &n);
ACAM.init();
for (int i = ; i <= n; i++)
{
scanf("%s" , s + );
ACAM.insert(s);
}
ACAM.rebuild();
ACAM.solve();
printf("NIE\n"); return ;
}

[POI 2000] 病毒的更多相关文章

  1. 洛谷 P2444 [ POI 2000 ] 病毒 —— AC自动机+dfs

    题目:https://www.luogu.org/problemnew/show/P2444 AC自动机上 dfs,不走结尾点,如果走出环就是有无限长度的串: RE无数,原来是数组开成 2000 的了 ...

  2. POI 2000 ------Stripes

    Stripes Time Limit:1000MS Memory Limit:30000KBTotal Submit:94 Accepted:43 Description Stripes is a t ...

  3. [POI 2000] 公共串

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2946 [算法] 建立多串后缀树 对于后缀树上的每个点 , 判断该节点所代表的等价类是 ...

  4. [转帖]Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染

    Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染 https://www.kubernetes.org.cn/5951.html 本来想说可以用 official版本的镜像 但是一 ...

  5. http://begin.lydsy.com/JudgeOnline/problem.php?id=2774(poi病毒)

    2774: Poi2000 病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 5  Solved: 4[Submit][Status][Web Boa ...

  6. bzoj2938 poi病毒 AC自动机

    题目传送门 思路: 要求构建一个字符串,使得这个字符串不包含给出的任意一个单词. 如果我们已经构建出了一个安全代码,放在ac自动机上跑,那么我们必定不能得到任何一个字符串,此时我们得到的fail指针必 ...

  7. POI操作Excel

    POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...

  8. JAVA的POI操作Excel

    1.1Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组 ...

  9. OAF_文件系列11_实现OAF读写Excel包JXL和POI的区别(概念)

    20150803 Created By BaoXinjian

随机推荐

  1. 如何使用ssh远程编辑定时任务crontab?

    linxu定时任务使用crontab,编辑crontab可以直接编辑:crontab -e:也可以直接读取文件 crontab file.这两种操作都不需要特殊权限sudo.区别在于,crontab ...

  2. Mybatis分页插件-PageHelper的使用

    转载:http://blog.csdn.net/u012728960/article/details/50791343 Mybatis分页插件-PageHelper的使用 怎样配置mybatis这里就 ...

  3. 求助大神!怎样除去XML节点反复的值的数据

    <?xml version="1.0" encoding="utf-8"? > <UpdCfg> <Upgrade> < ...

  4. 每天一个 Linux 命令(16):which whereis locate命令

    which  查看可执行文件的位置. whereis 查看文件的位置. locate   配合数据库查看文件位置.#whereis 和locate是从文件数据库里查找 数据库默认一个星期更新一次,所有 ...

  5. 更改 vux Tabbar TabbarItem标题下方的文字激活时的颜色

    步骤一: 打开文件build/webpack.base.conf.js, 找到modeule.exports = vuxLoader, 修改如下(并保存) module.exports = vuxLo ...

  6. openERP server action,最强大的功能,没有之一

    Jeffery9@gmail.com 出品 @jeffery-陈帆 原理 ations OE定义了ir.actions.actions,并从中派生了众多的子类 ir.actions.client ir ...

  7. EhCache Monitor的使用

    1.在http://ehcache.org/documentation/monitor.html#Installation_And_Configuration下载ehcache-monitor-kit ...

  8. matlab2016b -ubuntu 1604 -install- and -trouble -shooting--finally-all is ok!!

    Linux系统下安装matlab2016b 标签: ubuntumatlablinux 2016-09-24 22:11 16203人阅读 评论(22) 收藏 举报 分类: linux 版权声明:本文 ...

  9. transient、volatile关键字

    transient是在对象序列化的时候,不参与序列化的字段. 如LinkedList实现了Serializable,其中有变量transient int size = 0; 在Serializable ...

  10. Caused by:java.sql.SQLException:ORA-01008:并不是全部变量都已绑定

    1.错误描写叙述 Caused by:java.sql.SQLException:ORA-01008:并不是全部变量都已绑定 2.错误原因 3.解决的方法