[POI 2000] 病毒
[题目链接]
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] 病毒的更多相关文章
- 洛谷 P2444 [ POI 2000 ] 病毒 —— AC自动机+dfs
题目:https://www.luogu.org/problemnew/show/P2444 AC自动机上 dfs,不走结尾点,如果走出环就是有无限长度的串: RE无数,原来是数组开成 2000 的了 ...
- POI 2000 ------Stripes
Stripes Time Limit:1000MS Memory Limit:30000KBTotal Submit:94 Accepted:43 Description Stripes is a t ...
- [POI 2000] 公共串
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2946 [算法] 建立多串后缀树 对于后缀树上的每个点 , 判断该节点所代表的等价类是 ...
- [转帖]Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染
Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染 https://www.kubernetes.org.cn/5951.html 本来想说可以用 official版本的镜像 但是一 ...
- 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 ...
- bzoj2938 poi病毒 AC自动机
题目传送门 思路: 要求构建一个字符串,使得这个字符串不包含给出的任意一个单词. 如果我们已经构建出了一个安全代码,放在ac自动机上跑,那么我们必定不能得到任何一个字符串,此时我们得到的fail指针必 ...
- POI操作Excel
POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...
- JAVA的POI操作Excel
1.1Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组 ...
- OAF_文件系列11_实现OAF读写Excel包JXL和POI的区别(概念)
20150803 Created By BaoXinjian
随机推荐
- java中finalkeyword
在java中有3个地方须要用finalkeyword: 1.假设一个不希望被继承,那么用final来修饰这个类 2.假设一个方法不须要被重写.那么这种方法用final来修饰 3.假设一个变量的值不希望 ...
- 【HDOJ 2089】不要62
[HDOJ 2089]不要62 第一个数位dp的题 做的老困难了...只是好歹是做出来了 迈出了第一步.. 对大牛来说这样的题都是小case ps:新上一个记忆化方法 一些绕弯的题里用dfs好想些 代 ...
- Android最佳实践之Material Design
Material概述及主题 学习地址:http://developer.android.com/training/material/get-started.html 使用material design ...
- 【转载】读懂IL代码就这么简单(三)完结篇
一 前言 写了两篇关于IL指令相关的文章,分别把值类型与引用类型在 堆与栈上的操作区别详细的写了一遍这第三篇也是最后一篇,之所以到第三篇就结束了,是因为以我现在的层次,能理解到的都写完了,而且个人认为 ...
- c#打包文件解压缩 C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法 一个简单例子理解C#的协变和逆变 对于过长字符串的大小比对
首先要引用一下类库:using Ionic.Zip;这个类库可以到网上下载. 下面对类库使用的封装方法: 得到指定的输入流的ZIP压缩流对象 /// <summary> /// 得到指定的 ...
- 为什么应使用 Node.js
为什么应使用 Node.js JavaScript 高涨的人气带来了很多变化,以至于如今使用其进行网络开发的形式也变得截然不同了.就如同在浏览器中一样,现在我们也可以在服务器上运行 JavaScrip ...
- 一起talk GDB吧(第二回:GDB单步调试)
各位看官们,大家好.我们在上一回中说简单地介绍了GDB.这一回中,我们介绍GDB的调试功能:单步 调试. 闲话休提,言归正转. 让我们一起talk GDB吧! 看官们,我们先说一下什么是单步调试.大家 ...
- 网页编程-Djiango(二)
一.初始Ajax ajax的写法: $.ajax({ url:'/host', type:'POST' data:{'k1':123,'k2':'root'} success:function(dat ...
- 使用Caffe完成图像目标检测 和 caffe 全卷积网络
一.[用Python学习Caffe]2. 使用Caffe完成图像目标检测 标签: pythoncaffe深度学习目标检测ssd 2017-06-22 22:08 207人阅读 评论(0) 收藏 举报 ...
- XML解析PULL
解析xml是很经常使用的操作,除了SAX和DOM两种最经常使用的解析xml外,Pull解析器解析XML文件. 在Android的源代码中大量的使用Pull解析.pull不仅更加的面相对象,并且使用速度 ...