bzoj2938 [Poi2000]病毒
来源:互联网 发布:微信网页授权登录源码 编辑:程序博客网 时间:2024/06/06 03:07
Description
二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码。
示例:
例如如果{
任务:
请写一个程序:
- 读入病毒代码;
- 判断是否存在一个无限长的安全代码;
- 将结果输出
Input
第一行包括一个整数
Output
你应在在文本文件
TAK ——假如存在这样的代码;NIE ——如果不存在。
Sample Input
3
01
11
00000
Sample Output
NIE
Solution
一个无限长的合法串,就会在ac自动机上跑成一个环,且不会进入
#include<bits/stdc++.h>using namespace std;#define N 1000001#define rep(i, a, b) for (int i = a; i <= b; i++)struct acDFAType { int ch[N][2], fail[N], tot; bool danger[N], inStk[N], vis[N]; char s[N]; void insert() { scanf("%s", s); int u = 0, len = strlen(s); rep(i, 0, len - 1) { if(!ch[u][s[i] - '0']) ch[u][s[i] - '0'] = ++tot; u = ch[u][s[i] - '0']; } danger[u] = 1; } void getFail() { register queue<int> q; rep(i, 0, 1) if(ch[0][i]) q.push(ch[0][i]); while(!q.empty()) { int u = q.front(); q.pop(); rep(i, 0, 1) { int v = ch[u][i]; if(!v) { ch[u][i] = ch[fail[u]][i]; continue; } q.push(v); int tmp = fail[u]; while(tmp && !ch[tmp][i]) tmp = fail[tmp]; fail[v] = ch[tmp][i]; danger[v] |= danger[fail[v]]; } } } bool dfs(int u) { inStk[u] = 1; rep(i, 0, 1) { int v = ch[u][i]; if(inStk[v]) return 1; if(danger[v] || vis[v]) continue; vis[v] = 1; if(dfs(v)) return 1; } return inStk[u] = 0; }}acm;int main() { int n; cin >> n; while(n--) acm.insert(); acm.getFail(); puts(acm.dfs(0) ? "TAK" : "NIE"); return 0;}
阅读全文
0 0
- BZOJ2938: [Poi2000]病毒
- bzoj2938: [Poi2000]病毒
- bzoj2938【Poi2000】病毒
- BZOJ2938: [Poi2000]病毒
- bzoj2938 [Poi2000]病毒
- BZOJ2938 POI2000 病毒 题解&代码
- AC自动机【poi2000】bzoj2938 病毒
- BZOJ2938: [Poi2000]病毒 AC自动机
- [bzoj2938][Poi2000]病毒 AC自动机
- BZOJ2938[Poi2000]病毒 AC自动机
- 【bzoj2938】[Poi2000]病毒 trie图+dfs
- [BZOJ2938][POI2000]病毒 做题笔记
- bzoj2938 [Poi2000]病毒 AC自动机+DP
- bzoj2938[Poi2000]病毒 AC自动机+dfs
- [BZOJ2938][Poi2000]病毒(AC自动机+拓扑排序)
- BZOJ2938 [Poi2000]病毒 解题报告【AC自动机】【DFS】
- BZOJ2938 POI2000 病毒 补全AC自动机 Trie图判环
- bzoj2938病毒
- 删除文件夹
- Linux 基本命令
- 再谈Jquery Ajax方法传递到action
- ROS/PCL条件滤波
- 事务
- bzoj2938 [Poi2000]病毒
- jsp中out.print及out.println无法换行的问题
- Elasticsearch生成json,创建索引(把数据写入索引中)
- 转载一个大神的函数
- [数据结构课设]汽车租借公司的管理
- 图像的旋转操作
- SDL_CondSignal与SDL_CondWait用法
- Kafka系列二之部署与使用
- nginx 负载均衡5种配置方式