title

BZOJ 2938

LUOGU 24444

简化题意:

二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码。

示例:

例如如果 \(\{011, 11, 00000\}\) 为病毒代码段,那么一个可能的无限长安全代码就是 \(010101…\) 。如果 \(\{01, 11, 000000\}\) 为病毒代码段,那么就不存在一个无限长的安全代码。

任务:

请写一个程序:

  1. 读入病毒代码;
  2. 判断是否存在一个无限长的安全代码;
  3. 将结果输出。

analysis

如果直接构造该串的话,时间复杂度显然会爆炸。

考虑AC自动机上该串匹配的性质。

很明显在AC自动机上,这个无限长的字符串永远不会到达一个标记节点,只会在AC自动机上的一个环上不断匹配。

所以我们只要找到这个环就行了。

注意如果一个节点的 \(fail\) 节点如果是标记节点,那么它自身也是标记节点,因为该节点的 \(fail\) 节点到根节点的串是该节点到根节点的串的后缀。

code

#include<bits/stdc++.h>const int maxn=3e4+10;namespace IO
{char buf[1<<15],*fs,*ft;inline char getc() { return (ft==fs&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),ft==fs))?0:*fs++; }template<typename T>inline void read(T &x){x=0;T f=1, ch=getchar();while (!isdigit(ch) && ch^'-') ch=getchar();if (ch=='-') f=-1, ch=getchar();while (isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48), ch=getchar();x*=f;}
}using IO::read;struct Aho_Corasick_AutoMaton
{int son[maxn][2],fail[maxn],cnt;bool v[maxn];inline void add(char *s){int len=strlen(s+1), now=0;for (int i=1; i<=len; ++i){int c=s[i]-'0';if (!son[now][c]) son[now][c]=++cnt;now=son[now][c];}v[now]=true;}inline void build(){std::queue<int>q;for (int i=0; i<2; ++i)if (son[0][i]) q.push(son[0][i]);while (!q.empty()){int x=q.front();q.pop();for (int i=0; i<2; ++i)if (son[x][i]) fail[son[x][i]]=son[fail[x]][i], v[son[x][i]]|=v[fail[son[x][i]]], q.push(son[x][i]);else son[x][i]=son[fail[x]][i];}}
} ACAM;bool vis[maxn],ins[maxn];
inline void dfs(int x)
{if (ins[x]) { puts("TAK"); exit(0); }if (vis[x] || ACAM.v[x]) return ;vis[x]=ins[x]=1;if (ACAM.son[x][0]) dfs(ACAM.son[x][0]);if (ACAM.son[x][1]) dfs(ACAM.son[x][1]);ins[x]=0;
}char ch[maxn];
int main()
{int n;read(n);for (int i=1; i<=n; ++i) scanf("%s",ch+1), ACAM.add(ch);ACAM.build();dfs(0);puts("NIE");return 0;
}

转载于:https://www.cnblogs.com/G-hsm/p/11429544.html

BZOJ 2938: [Poi2000]病毒 ACAM相关推荐

  1. bzoj 2938: [Poi2000]病毒(AC自动机)

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1085  Solved: 541 [Submit][Status] ...

  2. P2444 [POI2000]病毒(ACAM上找环)

    LINK 给出一些010101串,问是否存在无限长的某个010101串 使得给定的任何一个010101串都不是它的子串 普通考虑好像不太好弄,我们建出ACAMACAMACAM看看 预处理ed[i]ed ...

  3. BZOJ2938:[Poi2000]病毒

    BZOJ2938:[Poi2000]病毒 考虑AC自动机匹配的过程 如果下一个节点是危险节点,我们就不跳到这个节点 如果下一个节点的 fail 是危险节点,我们也不跳到这个节点 这个标记在 getfa ...

  4. [BZOJ2938]:[Poi2000]病毒

    题目传送门 题目描述: 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...

  5. BZOJ2938:[POI2000] 病毒

    Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...

  6. bzoj2938: [Poi2000]病毒

    被Star_Feel大爷带着做题 明显大力AC机然后找环 本来我一开始想的是先去有另一个病毒为前缀的病毒,结果今天早上写的时候偷懒没写 结果跳fail的时候会跳到中间...无语,Star_Feel大爷 ...

  7. BZOJ2938[Poi2000]病毒——AC自动机

    题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...

  8. bzoj 2946 [Poi2000]公共串——后缀自动机

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 对每个串都建一个后缀自动机,然后 dfs 其中一个自动机,记录同步的话在别的自动机上走 ...

  9. BZOJ 2947 Poi2000 促销 set

    标题效果:特定n天,首先插入一些每天.然后去掉最高值和最低值,要付出最大的值-至少值价格.乞讨n总天数支付的价格 堆/段树/平衡树光秃秃的标题 #include <set> #includ ...

最新文章

  1. matlab-代数方程
  2. 【论文解读】何恺明团队最新力作SimSiam:消除表征学习“崩溃解”,探寻对比表达学习成功之根源...
  3. Paas是什么——Go语言相关学习笔记
  4. 酷友观点/经验:支付接口返回数据接收地址,session数据丢失(或者说失效)的问题浅析(原创文章)...
  5. 使用Model-View-ViewModel使用Dart Streams使Flutter中的代码更清晰
  6. php cookie赋值使用
  7. Oracle RAC CRS-0184 --Cannot communicate with the CRS daemon
  8. php判断值是否为空然后定义,判断php变量是不是定义,是否为空
  9. 前后端分离的用户验证原理及Spring Boot + JWT的框架搭建(附完整的框架代码)之二
  10. Resharper上手指南转
  11. POJ1061 青蛙的约会(扩展欧几里得)题解
  12. 蓝桥杯2021国赛太原理工大学获得14枚奖牌
  13. 14.程序员的自我修养---附录
  14. Struts框架的工作原理
  15. scratch编程——一个列表实现经典扫雷游戏
  16. nginx 报错502
  17. 有道翻译 翻译功能的功能实现
  18. 小票打印机ESC/POS命令集
  19. ValueError.DataFrame columns must be unique for orient=“column“
  20. 基于Java的商城购物系统

热门文章

  1. 爱剪辑加字幕之经验及Python程序批量加字幕
  2. 初学者的 google seo 基础
  3. Scala08:Scala高级特性
  4. 《帝友 P2P 网络借贷系统》项目研发阶段性总结
  5. 转摘记录农民伯伯2011年看的东西
  6. 利用SerialPort类实现收发短信(C# 2.0)
  7. 微软称 win7 新补丁不涉及升级 win10 ,用户反驳!
  8. 易中天语录 - 关于生活
  9. python pexpect.before与after_python Pexpect模块的使用
  10. 河南中创|深夜突发!B站视频消失,网站崩溃,分布式存储将重构互联网生态