【AC自动机】病毒
【题目链接】
【题意】
寻找一个没有模式串为子串的无限01串。是否存在。
【题解】
其实就是用dfs找一个环。
1、环需要从根结点出发找到这个位置。且重新能走到这里,我们开一个“预测路径”的数组进行标记即可。
2、如果下一个结点碰上了“走过”标记过的,而不是“预测路径”,或者是模式串结尾,我们就避开不走。
注意:
fail数组是可以进行传递的,就是说fail指向的结点,同时是模式串的结尾,那么该位置也是不合法的。
最后看看代码怎么实现就明白了。
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; const int N = ;
const int M = ; int Trie[M][] , fail[M] , End[M], idx ;
int Q[M] , Head , Tail ;
int vis[M],used[M];
int n ; char str[N]; void Insert( char s[] ){
int p = ;
for(int i= ; s[i] ; i++ ){
int t = s[i] - '' ;
if( !Trie[p][t] )
Trie[p][t] = ++idx ;
p = Trie[p][t];
}
End[p] ++ ;
} void Build(){
Head = , Tail = ;
for(int i=;i<;i++)
if(Trie[][i])
Q[++Tail] = Trie[][i] ;
//fail[Trie[0][i]] = 0; while( Head <= Tail ){
int u = Q[Head++] ;
for(int i=;i<;i++){
int To = Trie[u][i];
if( To ){
fail[To] = Trie[fail[u]][i];
Q[++Tail] = To; End[To] = End[To] || End[fail[To]] ;
}else{
Trie[u][i] = Trie[fail[u]][i];
}
}
} } bool dfs(int u){
vis[u] = ;
for(int i=;i<=;i++){
int To = Trie[u][i];
if( vis[To] ) return true;
if( used[To] || End[To] ) continue;
used[To] = ;
if( dfs(To) ) return true ;
}
vis[u] = ;
return false ;
}
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%s",str);
Insert(str);
}
Build();
puts(dfs()?"TAK":"NIE"); return ;
}
病毒
【AC自动机】病毒的更多相关文章
- AC自动机---病毒侵袭持续中
HDU 3065 题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/C Description 小t ...
- AC自动机---病毒侵袭
HDU 2896 题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/B Description 当太 ...
- 【HDU2896】病毒侵袭 AC自动机
[HDU2896]病毒侵袭 Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年 ...
- hdu 2896 病毒侵袭 ac自动机
/* hdu 2896 病毒侵袭 ac自动机 从题意得知,模式串中没有重复的串出现,所以结构体中可以将last[](后缀链接)数组去掉 last[]数组主要是记录具有相同后缀模式串的末尾节点编号 .本 ...
- HDU 2896 病毒侵袭(AC自动机)
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 【HDU3065】 病毒侵袭持续中(AC自动机)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- 洛谷P2444 [POI2000]病毒(AC自动机,DFS求环)
洛谷题目传送门 AC自动机入门--yyb巨佬的博客 AC自动机入手经典好题(虽然年代久远) 有了fail指针,trie树就不是原来的树型结构了,我们可以把它叫做trie图,由父节点向子节点连的边和fa ...
- 【Luogu2444】病毒(AC自动机)
[Luogu2444]病毒(AC自动机) 题面 洛谷 题解 如果存在一个无限长的串 证明可以在\(AC\)自动机上找到一个环 然后在上面可以无限跳 所以构建\(AC\)自动机 在上面跑\(dfs\)就 ...
- hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- BZOJ2938[Poi2000]病毒——AC自动机
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
随机推荐
- Spring Cloud Gateway(一):认识Spring Cloud Gateway
1.Spring Cloud Gateway 简介 Spring Cloud Gateway 系列目录 Spring Cloud Gateway(一):认识Spring Cloud Gateway S ...
- Node解析之----模块机制篇
开篇前,我们先来看张图, 看node与W3C组织.CommonJS组织.ECMAScript之间的关系. Node借鉴来CommonJS的Modules规范实现了一套非常易用的模块系统,NPM对Pac ...
- root of context hierarchy
Spring Boot项目,运行不明中断.日志如下: 2018-11-03 11:03:43.358 INFO [Thread-2][AbstractApplicationContext.java:9 ...
- selenium 配置 chromedriver
参考文档: https://blog.csdn.net/yoyocat915/article/details/80580066?tdsourcetag=s_pcqq_aiomsg http://npm ...
- ORACLE EXECUTE IMMEDIATE 小结
EXECUTE IMMEDIATE 代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,E ...
- Python Docstring 风格和写法学习
什么是Python Docstring 和Java类似,Python也通过注释形式的Docstring给程序.类.函数等建立文档.通过Docstring建立的文档不仅对人来说有更好的可读性,也能够让I ...
- 安装mysql问题解决
[root@apollo init.d]# /etc/init.d/mysqld startmy_print_defaults: Can't read dir of '/etc/my.cnf.' (E ...
- ajax结合mysql数据库和smarty实现局部数据状态的刷新
效果状态:通过点击锁定状态实现状态锁定与不锁定之间的切换 1.主程序:01.php导入smarty和mysql类,取得数据导入列表模板 <?php include './include/M ...
- osg(openscenegraph).chm帮助文档
openscenegraph 3.6.3 链接:https://pan.baidu.com/s/1cQkiTPQx5MIIfxe5FTfjYw 提取码:7w4z openscenegraph 3.4 ...
- VLC播放器web插件接口(Part2)
本文转自:http://www.educity.cn/wenda/124878.htmlVLC Activex控件(VideoLAN.VLCPlugin.1 VideoLAN.VLCPlugin.2) ...