bzoj2938【Poi2000】病毒
2938: [Poi2000]病毒
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 345 Solved: 176
[Submit][Status][Discuss]
Description
假设某段代码中不存在不论什么一段病毒代码,那么我们就称这段代码是安全的。如今委员会已经找出了全部的病毒代码段,试问,是否存在一个无限长的安全的二进制代码。
Input
下面的n行每一行都包含一个非空的01字符串——就是一个病毒代码段。
全部病毒代码段的总长度不超过30000。
Output
Sample Input
01
11
00000
Sample Output
HINT
Source
这道题的思路非常好
首先我们跑一次AC自己主动机。Trie树和失配边就构成了一个有向图。那么,能找到一个无限长的安全代码,当且仅当在非单词节点中存在环。用拓扑排序推断就可以。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define pa pair<int,int>
#define maxn 30100
#define inf 1000000000
using namespace std;
struct edge_type
{
int next,to;
}e[maxn*2];
int go[maxn],in[maxn],head[maxn],t[maxn][2];
int n,tot=1,cnt=0;
bool v[maxn];
char s[maxn];
inline void add_edge(int x,int y)
{
e[++cnt]=(edge_type){head[x],y};
head[x]=cnt;
}
inline void insert()
{
scanf("%s",s);
int len=strlen(s),now=1;
F(i,0,len-1)
{
int x=s[i]-'0';
if (!t[now][x]) t[now][x]=++tot;
now=t[now][x];
}
v[now]=true;
}
inline void bfs()
{
queue<int> q;
q.push(1);
while (!q.empty())
{
int x=q.front(),y,j;q.pop();v[x]|=v[go[x]];
F(i,0,1)
{
j=go[x];
while (j&&!t[j][i]) j=go[j];
if (t[x][i])
{
go[y=t[x][i]]=j?t[j][i]:1;
q.push(y);
}
else t[x][i]=j? t[j][i]:1;
}
}
}
inline bool topsort()
{
queue<int> q;
int sum=0;
F(i,1,tot)
{
if (v[i]) sum++;
else F(j,0,1) if (!v[t[i][j]])
{
add_edge(i,t[i][j]);
in[t[i][j]]++;
}
}
F(i,1,tot) if (!v[i]&&!in[i]) q.push(i);
while (!q.empty())
{
int x=q.front();q.pop();sum++;
for(int i=head[x];i;i=e[i].next)
{
int y=e[i].to;
in[y]--;
if (!in[y]) q.push(y);
}
}
return sum==tot;
}
int main()
{
scanf("%d",&n);
F(i,1,n) insert();
bfs();
printf("%s\n",topsort()? "NIE":"TAK");
return 0;
}
bzoj2938【Poi2000】病毒的更多相关文章
- [bzoj2938][Poi2000]病毒_AC自动机
病毒 bzoj-2938 Poi-2000 题目大意:给你n个01串,问是否存在一个无限长的01串使得这个01的任意子串都不等于给出的01串. 注释:All_length<=30,000 想法: ...
- BZOJ2938: [Poi2000]病毒(AC自动机)
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1678 Solved: 849[Submit][Status][D ...
- BZOJ2938 [Poi2000]病毒 和 BZOJ5261 Rhyme
[Poi2000]病毒 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
- bzoj2938: [Poi2000]病毒
建AC自动机,把所有病毒的节点都删掉,dfs判有没有环,有环就找得到. #include <iostream> #include <cstdio> #include <c ...
- BZOJ2938[Poi2000]病毒——AC自动机
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
- BZOJ2938:[POI2000]病毒(AC自动机)
Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
- BZOJ2938 [Poi2000]病毒 【AC自动机】
题目 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在 ...
- BZOJ2938 POI2000病毒
我们不能让重复过的字串出现在无限串上(就叫这个了...) 也就是要自动机一直能匹配但就是匹配不到,那么就是在自动机上找一个环. dfs判环即可.注意是个有向图. #include<bits/st ...
- 【BZOJ2938】[Poi2000]病毒 AC自动机+DFS
[BZOJ2938][Poi2000]病毒 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码 ...
- 【BZOJ-2938】病毒 Trie图 + 拓扑排序
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 609 Solved: 318[Submit][Status][Di ...
随机推荐
- Liunx-php7安装swoole扩展
Liunx-php7安装swoole扩展 标签(空格分隔): php 下载包 https://github.com/swoole/swoole-src/releases 安装过程 直接wget也行直接 ...
- laravel中的数据迁移和数据填充
laravel中的数据迁移和数据填充 标签(空格分隔): php 生成迁移文件两种方式: 1 新建一个表的迁移文件 php artisan make:migration create_students ...
- 那些不兼容 IE11的网站(持续更新)
此博文用于收集不兼容 IE11 的网站,持续更新,请网站开发者自己认领: 兼容性引起的功能缺陷: v.qq.com (提示未安装 Flash 播放器,这问题我反馈几百年了,还没修复) tv.sohu. ...
- WebRTC Native APIs
WebRTC Native APIs The WebRTC Native APIs implementation is based on W3C’s WebRTC 1.0: Real-time Com ...
- twig 模板引擎使渲染视图更加优雅
在使用 laravel 的时候接触过 blade 模板引擎.在学习的时候,接触到了另外一个强大的模板引擎:twig 官网:https://twig.sensiolabs.org/ 中文手册:http: ...
- CF 986A Fair(多源BFS)
题目描述 一些公司将在Byteland举办商品交易会(or博览会?).在Byteland有 nnn 个城市,城市间有 mmm 条双向道路.当然,城镇之间两两连通. Byteland生产的货物有 kkk ...
- 前端之CSS属性相关
宽和高 width属性可以为元素设置宽度. height属性可以为元素设置高度. 块级标签才能设置宽度,内联标签的宽度由内容来决定. 字体属性 文字字体 font-family可以把多个字体名称作为一 ...
- php如何openssl_encrypt加密解密
最近在对接客户的CRM系统,获取令牌时,要用DES方式加密解密,由于之前没有搞错这种加密方式,经过请教了"百度"和"谷歌"两个老师后,结合了多篇文档内容后,终于 ...
- 20180929 北京大学 人工智能实践:Tensorflow笔记01
北京大学 人工智能实践:Tensorflow笔记 https://www.bilibili.com/video/av22530538/?p=13 (完)
- Unity Camera中心点的偏移
在VR 中,如果镜片的中心轴,和屏幕的中心轴不在一条线上, 就会出现无论如何调节IPD,看到的图像都不清晰,这时候,要修改Camera的投影矩阵, 只需要一句代码就能搞定: Camera.main.p ...