http://begin.lydsy.com/JudgeOnline/problem.php?id=2774(poi病毒)
2774: Poi2000 病毒
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 5 Solved: 4
[Submit][Status][Web Board]
Description
如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病毒代码段
试问,是否存在一个无限长的安全的二进制代码。
示例:
例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101…。如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码。
任务:
请写一个程序:
读入病毒代码,判断是否存在一个无限长的安全代码;
Input
以下的n行每一行都包括一个非空的01字符串——就是一个病毒代码段。所有病毒代码段的总长度不超过30000。
Output
TAK——假如存在这样的代码;
NIE——如果不存在。
Sample Input
3
01
11
00000
Sample Output
NIE
HINT
Source
题解:
首先我们把所有串建一个AC自动机
方便起见我们直接把fail指针合并到子结点
如果一个串能无限长,也就是说它可以在AC自动机上一直进行匹配但就是匹配不上
也就是说匹配指针不能走到val为1的结点,设这个点为x
即root..x是一个病毒串
那么fail指针指向x的y也不能走
因为root..x是root..y的一个后缀
处理出来判断有向图是否有环
dfs即可
#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 30001
using namespace std;
int n,tot;
char s[maxn];
int sum[maxn],son[maxn][],lis[maxn],fai[maxn];
int ins[maxn],vis[maxn];
void insert()
{
int p=;
scanf("%s",s+);
for (int i=; s[i]; p=son[p][s[i]-''],i++) if (!son[p][s[i]-'']) son[p][s[i]-'']=++tot;
sum[p]=;
}
void failed()
{
int head=,tail=; lis[]=; fai[]=-;
while (head<tail)
{
int x=lis[++head];
for (int i=; i<=; i++)
{
int v=son[x][i];
if (!v)
{
son[x][i]=son[fai[x]][i];
continue;
}
lis[++tail]=v;
int p=fai[x];
while (p!=- && !son[p][i]) p=fai[p];
if (p==-) fai[v]=;
else
fai[v]=son[p][i],sum[v]|=sum[son[p][i]]; }
}
}
bool dfs(int x)
{
ins[x]=;
for (int i=; i<; i++)
{
int v=son[x][i];
if (ins[v]) return ;
if (vis[v] || sum[v]) continue;
vis[v]=;
if (dfs(v)) return ;
}
ins[x]=;
return ;
}
int main()
{
cin>>n; tot=; memset(son,,sizeof(son));
for (int i=; i<=n; i++) insert();
failed();
if (dfs()==) cout<<"TAK"<<endl; else cout<<"NIE"<<endl;
}
http://begin.lydsy.com/JudgeOnline/problem.php?id=2774(poi病毒)的更多相关文章
- Zju1290 Word-Search Wonder(http://begin.lydsy.com/JudgeOnline/problem.php?id=2768)
2768: Zju1290 Word-Search Wonder Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 4 Solved: 2[Submit] ...
- http://begin.lydsy.com/JudgeOnline/problem.php?id=2770(PKU2503 Babelfish)
2770: PKU2503 Babelfish Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2 Solved: 2[Submit][Status][ ...
- 题目连接:http://acm.zznu.edu.cn/problem.php?id=1329
题目大意: 定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍.当且仅当差是17的倍数时,原数也是17的倍数 . 例如,34是17的倍数,因为3-20=-17是17的倍数:20 ...
- 在线判题 (模拟)http://202.196.1.132/problem.php?id=1164
#include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> #de ...
- begin lydsy 2731
2731: 最长重复子串 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 6 Solved: 4[Submit][Status][Web Board] ...
- BZOJ(begin) 1328 [Usaco2003 Open]Jumping Cows:贪心【波峰波谷模型】
题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=1328 题意: 给你一个长度为n的正整数序列. 可以选任意个数字,只能从左往右选. 偶数 ...
- (最小路径覆盖) News 消息传递 (hust OJ 2604)
http://begin.lydsy.com/JudgeOnline/problem.php?id=2604 Description 总部最近打算向下面的N个工作人员发出了一条秘密消息.因为它是机 ...
- Hash_集合
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> ...
- [Noi2016十连测第五场]二进制的世界
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
随机推荐
- 使用Emmet加速Web前端开发
Emmet插件以前被称作为Zen Coding,是一个文本编辑器的插件,它可以帮助您快速编写HTML和CSS代码,从而加速Web前端开发.早在2009年,Sergey Chikuyonok写过一篇文章 ...
- BD string 百度之星初赛的题目 数学
http://acm.hdu.edu.cn/showproblem.php?pid=5694 可以说这道题目挺考验思维含量的吧 首先,这个和数位dp是差不多的方法,计算cal(l)-cal(l-1): ...
- 转 oracle 开发 第03章 sqlplus
目录 1.查看表结构 desc 2.编辑SQL语句 append.list.change.run 3.保存.检索并运行文件 save.get.start.edit.spool 4.格式化列 colum ...
- iOS7以后的侧滑返回上一页
我们知道,iOS7以后,导航控制器默认带了侧滑返回功能,但是仅限于屏幕边缘.而且在你自定义leftBarButtonItem等之后侧滑效果就会消失.这种问题怎么解决呢? 首先,我们先来看看系统的这种手 ...
- UIView(包括子类)的几个初始化时执行动作的时机
转载自:http://www.tqcto.com/article/mobile/56963.html 根据你需要执行的动作, 这里有几个方法: -(id)initWithFrame:(CGRect)f ...
- 如何把一个TXT文本文件按行数分割成多个文本文件
2011-04-27 12:00:24| 分类: 默认分类 |字号 订阅 网上有很多文本分割软件都是按字节大小来分割的,主要用于小说类的文本分割,对于比较有规则的内容按行数进行分割非常不方便 ...
- Android中通过pid获取app包名
String callerPackage = getAppNameByPID(getContext(), Binder.getCallingPid()); private String getAppN ...
- makefile里有哪些target?
make help or grep ^[a-z].*\:$ Makefile | sed s,:,,g
- Lumen 时区设置
根据 Laravel 4.x 和 5.0 的经验, 只需要到 config/app.php 中设置下 'timezone' 参数为 'PRC' 就好了, 找到 Lumen 的 config 目录, 在 ...
- 串口通信中ReadFile和WriteFile的超时详解!
源:串口通信中ReadFile和WriteFile的超时详解! 在用ReadFile和WriteFile读写串行口时,需要考虑超时问题.如果在指定的时间内没有读出或写入指定数量的字符,那么ReadFi ...