【BZOJ2938】【luoguP2444】病毒
description
二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码。
示例:
例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101…。如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码。
任务:
请写一个程序:
1.在文本文件WIR.IN中读入病毒代码;
2.判断是否存在一个无限长的安全代码;
3.将结果输出到文件WIR.OUT中。
analysis
对所有模式串建\(AC\)自动机,然后考虑可行的安全代码在\(AC\)自动机上的匹配
安全代码若无限长,则必然在\(AC\)自动机上无限匹配、且不会匹配到失败节点
注意一个节点的\(fail\)是失败节点,该节点也是,因为\(fail\)的字符串是该点字符串的后缀
然后在自动机上\(dfs\)找出一个环,节点经过两次则有解
code
#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#define MAXN 100005
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i)
using namespace std;
ll trie[MAXN][2],fail[MAXN],vis[MAXN];
bool bz[MAXN],flag[MAXN];
char s[30005];
ll n,tot,root;
queue<ll>q;
inline ll newnode(){++tot,trie[tot][0]=trie[tot][1]=-1;return tot;}
inline void init(){tot=0,root=newnode();}
inline void insert(char s[])
{
ll len=strlen(s),now=root;
fo(i,0,len-1)
{
if (trie[now][s[i]-'0']==-1)trie[now][s[i]-'0']=newnode();
now=trie[now][s[i]-'0'];
}
flag[now]=1;
}
inline void buildfail()
{
q.push(root),fail[root]=root;
while (!q.empty())
{
ll now=q.front();q.pop();
fo(i,0,1)if (trie[now][i]==-1)trie[now][i]=(now==root?root:trie[fail[now]][i]);
else flag[trie[now][i]]|=flag[trie[fail[now]][i]],fail[trie[now][i]]=(now==root?root:trie[fail[now]][i]),q.push(trie[now][i]);
}
}
inline bool dfs(ll x)
{
if (vis[x]==1)return 1;
if (vis[x]==-1)return 0;vis[x]=1;
fo(i,0,1)if (!flag[trie[x][i]]){if (dfs(trie[x][i]))return 1;}
vis[x]=-1;return 0;
}
int main()
{
//freopen("P2444.in","r",stdin);
scanf("%lld",&n),init();
fo(i,1,n)scanf("%s",&s),insert(s);
buildfail(),printf(dfs(root)?"TAK\n":"NIE\n");
return 0;
}
【BZOJ2938】【luoguP2444】病毒的更多相关文章
- [bzoj2938][Poi2000]病毒_AC自动机
病毒 bzoj-2938 Poi-2000 题目大意:给你n个01串,问是否存在一个无限长的01串使得这个01的任意子串都不等于给出的01串. 注释:All_length<=30,000 想法: ...
- 【BZOJ-2938】病毒 Trie图 + 拓扑排序
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 609 Solved: 318[Submit][Status][Di ...
- bzoj2938: [Poi2000]病毒
建AC自动机,把所有病毒的节点都删掉,dfs判有没有环,有环就找得到. #include <iostream> #include <cstdio> #include <c ...
- BZOJ2938[Poi2000]病毒——AC自动机
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
- BZOJ2938:[POI2000]病毒(AC自动机)
Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
- BZOJ2938: [Poi2000]病毒(AC自动机)
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1678 Solved: 849[Submit][Status][D ...
- 【bzoj2938】病毒
Portal -->bzoj2938 Solution 这题的话..一开始想的是不是上一个trie就消失了但是后来发现好像我还是太年轻qwq 比较容易联想到..AC自动机,多串匹配嘛 然后就.. ...
- bzoj2938 poi病毒 AC自动机
题目传送门 思路: 要求构建一个字符串,使得这个字符串不包含给出的任意一个单词. 如果我们已经构建出了一个安全代码,放在ac自动机上跑,那么我们必定不能得到任何一个字符串,此时我们得到的fail指针必 ...
- BZOJ2938 [Poi2000]病毒 【AC自动机】
题目 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在 ...
- BZOJ2938 [Poi2000]病毒 和 BZOJ5261 Rhyme
[Poi2000]病毒 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
随机推荐
- 前端学习(十八)js的json(笔记)
json: 数组: 1.有序 var arr=[2,1,3,4] arr[0]; 2.有length 3.普通for 4.下标数字 5.添加删除 splice json: ...
- delphi 打印 PDevMode 说明
//PDevMode = _devicemodeW;// _devicemodeW = record// dmDeviceName: array[0..CCHDEVICENAME - 1] of Wi ...
- Yii2 自定义组件
basic\components\HelloWidget namespace app\components; use yii\base\Widget; use yii\helpers\Html; cl ...
- NX二次开发-BlockUI对话框嵌套MFC对话框制作进度条
半年前在一些QQ群看到有大神NX二次开发做出了进度条,那个时候我还不会弄,也不知道怎么弄得,后来断断续续得研究了一下,直到今天我把它做出来了.内心还是很喜悦的!回想自己这两年当初从没公司肯给我做NX二 ...
- host文件是作用
什么是HOST文件:Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Host ...
- XSS的原理分析与解剖:第三章(技巧篇)**************未看*****************
0×01 前言: 关于前两节url: 第一章:http://www.freebuf.com/articles/web/40520.html 第二章:http://www.freebuf.com/a ...
- tomcat8.5在centos部署阿里云免费证书
最近在做微信小程序,部署完服务器之后,发现报了个错误,说是我的域名不在以下合法域名列表中.对比了一下才发现我的域名还是http的没升级到https,之后我就到阿里云去申请了证书.中间有一次审核失败,查 ...
- (转)websocket
作者:Ovear链接:https://www.zhihu.com/question/20215561/answer/40316953来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit
最近想用一下Xtreme ToolkitPro 界面库,安装后用VC6根据向导 产生一个工程,编译时出现如下的错误: fatal error C1076: compiler limit : inter ...
- 本地JAR包打入本地mvn仓库
新建目录my-lib,将jar包移动到目录中,添加pom文件(用alipay测试) <project xmlns="http://maven.apache.org/POM/4.0.0& ...