#AC自动机#洛谷 2444 [POI2000]病毒
题目
给定若干01串,问是否存在无限长的01串任意子串不是给定的若干串
分析
如果在AC自动机上跳到了访问过的前缀即代表存在一个循环可以无限跳,
在AC自动机上记录哪些状态是不能访问的,在AC自动机上沿trie树标记已经走过
代码
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#define rr register
using namespace std;
const int N=30011;
int n; char s[N];
bool Is_Virus[N],v[N];
struct I_AC_THE_TASK{
int tot,trie[N][2],fail[N];
inline void Insert(char *s){
rr int len=strlen(s),now=1;
for (rr int i=0;i<len;++i){
if (!trie[now][s[i]^48]) trie[now][s[i]^48]=++tot;
now=trie[now][s[i]^48];
}
Is_Virus[now]=1;
}
inline void Build(){
rr queue<int>q; q.push(1);
while (!q.empty()){
rr int x=q.front(); q.pop();
for (rr int i=0;i<2;++i)
if (!trie[x][i]) trie[x][i]=trie[fail[x]][i];
else {
fail[trie[x][i]]=trie[fail[x]][i],q.push(trie[x][i]);
Is_Virus[trie[x][i]]|=Is_Virus[trie[fail[x]][i]];
}
}
}
}AC;
inline void dfs(int x){
if (v[x]) printf("TAK"),exit(0);
if (Is_Virus[x]) return; v[x]=1;
if (AC.trie[x][0]) dfs(AC.trie[x][0]);
if (AC.trie[x][1]) dfs(AC.trie[x][1]);
v[x]=0;
}
signed main(){
scanf("%d",&n); AC.tot=1;
for (rr int i=0;i<2;++i) AC.trie[0][i]=1;
for (rr int i=1;i<=n;++i) scanf("%s",s),AC.Insert(s); AC.Build();
dfs(1);
return !printf("NIE");
}
#AC自动机#洛谷 2444 [POI2000]病毒的更多相关文章
- 洛谷P2444 [POI2000]病毒(AC自动机,DFS求环)
洛谷题目传送门 AC自动机入门--yyb巨佬的博客 AC自动机入手经典好题(虽然年代久远) 有了fail指针,trie树就不是原来的树型结构了,我们可以把它叫做trie图,由父节点向子节点连的边和fa ...
- [洛谷P2444] [POI2000]病毒
洛谷题目链接:[POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会 ...
- 洛谷 P2444 [POI2000]病毒 解题报告
P2444 [POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已 ...
- cjoj P1435 - 【模板题 USACO】AC自动机 && 洛谷 P3796 【模板】AC自动机(加强版)
又打了一遍AC自动稽. 海星. 好像是第一次打trie图,很久以前就听闻这个思想了.OrzYYB~ // It is made by XZZ #include<cstdio> #inclu ...
- BZOJ2938 & 洛谷2444:[POI2000]病毒——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2938 https://www.luogu.org/problemnew/show/P2444 二进制 ...
- 洛谷2444(Trie图上dfs判环)
要点 并没问具体方案,说明很可能不是构造. 思考不断读入这个文本串,然后中间不出现某些文法的串.啊,这就是个自动机. 将不合法串使用ac自动机构成一个Trie图,我们需要的字符串就是在这个自动机上无限 ...
- AC 自动机学习笔记
虽然 NOIp 原地爆炸了,目前进入 AFO 状态,但感觉省选还是要冲一把,所以现在又来开始颓字符串辣 首先先复习一个很早很早就学过但忘记的算法--自动 AC AC自动机. AC 自动机能够在 \(\ ...
- 给宝宝的AC自动机启蒙指南(宝宝的第一本)
AC自动机 根据已有经验,学完虚数会变虚,然后写出的代码就不是人能看的了 所以我们来学实树罢(喜) 以上为废话博客背景 有限状态自动机 首先我们来了解一下自动机是啥. 说的通俗一点,我们可以把自动机看 ...
- 【BZOJ】2938: [Poi2000]病毒
题意 \(n\)个01病毒串,总长不超过\(30000\).问是否存在无限长的不包含病毒串的01串. 分析 考虑ac自动机,如果不包含病毒串而且无限长也就是说存在一个环(转移和fail树),使得环上不 ...
- 最小生成树 & 洛谷P3366【模板】最小生成树 & 洛谷P2820 局域网
嗯... 理解生成树的概念: 在一幅图中将所有n个点连接起来的n-1条边所形成的树. 最小生成树: 边权之和最小的生成树. 最小瓶颈生成树: 对于带权图,最大权值最小的生成树. 如何操作? 1.Pri ...
随机推荐
- JSON排除指定字段的4种方法
转自:https://blog.csdn.net/Sn_Keys/article/details/122443407
- 使用paramiko模块远程连接遇到paramiko.ssh_exception.NoValidConnectionsError的解决办法
连接时报错paramiko.ssh_exception.NoValidConnectionsError, 解决办法 首先在ubuntu终端上输入:cat /etc/ssh/ssh_config,查看端 ...
- 基于javaweb的服装租赁网站
演示 技术+环境+工具 jdk8+maven.3.2.1+mysql5.7+idea+navicat+spring+springmvc+mybatis+bootstrap+jquery+ajax
- 【Azure 环境】记录使用Notification Hub,安卓手机收不到Push通知时的错误,Error_Code 30602 or 30608
问题描述 使用Azure Notification Hub + Baidu 推送遇见的两次报错为: 1. {"request_id":2921358089,"error_ ...
- 【Azure 应用服务】可以在app service里建SFTP服务吗?
问题描述 怎样可以在App Service里建SFTP服务? 并不是说通过FTP的方式进行App Service的文件部署. 问题回答 不能通过 App Service 来搭建总计的SFTP服务,因为 ...
- hbase报错ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet 采坑记
1.错误异常信息: Exception in thread "main" java.lang.IllegalArgumentException: Failed to find me ...
- 【项目实战】SpringBoot+vue+iview打造一个极简个人博客系统
基于SpringBoot+vue+iview个人极简博客 项目介绍 个人极简博客 [个人极简博客]是一个适用于初学者学习的博客系统,其中包含文章分类.写文章.标签管理.用户管理等基础功能,代码简洁注释 ...
- Netty笔记(4) - 对Http和WebSocket的支持、心跳检测机制
对HTTP的支持 服务端代码: 向 PipeLine中 注册 HttpServerCodec Http协议的编码解码一体的Handler 处理Http请求 封装Http响应 public class ...
- tomcat SSL安全连接配置简介
tomcat中使用https提供服务,配置的方式有两种.生成或购买CA证书时会要求绑定域名.设置密码和证书别名(aliase). tomcat可用的证书列表里用三个文件: 方式一: <Conne ...
- 正则表达式 <h2>kk</h2> 替换为 <h2 id="kk">kk</h2>
`<h2>kk</h2><h2>k333k</h2>`.replace(/\<h2>(.*?)<\/h2>/g, `<h2 ...