[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
随机推荐
- dll的使用
2016-12-11 23:02:24 一:生成DLL 1:创建DLL工程 文件->新建->项目->visual c++->win32->win32控制台应用程序(w ...
- Atitit.ati  str  字符串增强api
Atitit.ati str 字符串增强api 1. java StringUtils方法全览 分类: Java2011-11-30 17:22 8194人阅读 评论(2) 收藏 举报 javas ...
- [笔记] 精通正则表达式/Mastering Regular Expressions
/ 匹配<emphasis>这个tag标注的IP地址的RE:‘<emphasis>([0-9]+(\.[0-9]+){3})</emphasis>' / 锚定--a ...
- iOS移动开发周报-第16期
iOS移动开发周报-第16期 [摘要]:本期iOS移动开发周报带来如下内容:iOS 8的新特性,敏感逻辑的保护方案,iOS绘图教程,WKWebView的使用等. 教程 <iOS 8>: ...
- datatable的使用
学习可参考:http://www.guoxk.com/node/jquery-datatables http://yuemeiqing2008-163-com.iteye.com/blog/20069 ...
- tween用户使用指南
tween.js user guide tween.js用户指南 1.What is a tween? How do they work? Why do you want to use them? 一 ...
- Linux 操作系统中的进程结构
前言 在 Linux 中,一个正在执行的程序往往由各种各样的进程组成,这些进程除了父子关系,还有其他的关系.依赖于这些关系,所有进程构成一个整体,给用户提供完整的服务( 考虑到了终端,即与用户的交互 ...
- CSS伪类:before 和 :after
CSS用了许久,对一些伪类熟视无睹,从不想着去搞清楚一下.比如说这个 :before :after 其实,:before 表示该标记前面的样式,反之 :after 代表设置后面的样式.网页上常常看到有 ...
- EasyDarwin流媒体服务器RTSP拉模式流媒体转发模块设计
拉模式转发 拉模式转发,顾名思义就是服务器主动从源端(IPCamera.NVR.或者其他流媒体服务器)通过RTSP/RTP协议将流媒体音视频数据拉取到流媒体转发服务器,再通过内部分发调度机制,分发给请 ...
- 远程访问Linux的常见方式
访问方式 不加密文字界面:telnet.rsh 加密文字界面:SSH 图形界面:Xdmcp.RDP.VNC SSH SSH用来取代finger.R shell(rlogin.rcp.rsh).teln ...