luoguP2444_[POI2000]病毒
题意
给定多个01模式串,问是否存在一个无限长的字符串不包含任何一个模式串。
分析
- 好像数据有点水,网上一大堆题解连样例都没过???
- 多模式串,先把AC自动机建出来再说。
- 反向考虑,若存在一个无限长的字符串不包含任何一个模式串,那就说明这个字符串可以在AC自动机上无限匹配,所以我们在AC自动机上dfs找环即可。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+50;
bool flag;
struct ACM{
int tr[N][2],val[N],fail[N],cnt,x[N],vis[N];
void init(){
memset(tr,0,sizeof(tr));
memset(val,0,sizeof(val));
memset(fail,0,sizeof(fail));
}
void insert(char *s){
int len=strlen(s);
int now=0;
for(int i=0;i<len;i++){
int id=s[i]-'0';
if(!tr[now][id]){
tr[now][id]=++cnt;
}
now=tr[now][id];
}
val[now]++;
x[now]++;
}
void build(){
queue<int> q;
for(int i=0;i<2;i++){
if(tr[0][i]){
q.push(tr[0][i]);
fail[tr[0][i]]=0;
}
}
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=0;i<2;i++){
if(tr[u][i]){
fail[tr[u][i]]=tr[fail[u]][i];
x[tr[u][i]]+=x[tr[fail[u]][i]];
q.push(tr[u][i]);
}else{
tr[u][i]=tr[fail[u]][i];
}
}
}
}
void dfs(int u){
if(flag){
return;
}
vis[u]=0;
for(int i=0;i<2;i++){
int v=tr[u][i];
if(x[v]){
continue;
}
if(vis[v]==-1){
dfs(v);
}else if(vis[v]==0){
flag=true;
}
}
vis[u]=1;
}
void solve(){
memset(vis,-1,sizeof(vis));
dfs(0);
}
}ac;
int n;
char s[N];
int main(){
freopen("in.txt","r",stdin);
scanf("%d",&n);
ac.init();
for(int i=0;i<n;i++){
scanf("%s",s);
ac.insert(s);
}
ac.build();
ac.solve();
if(flag){
printf("TAK\n");
}else{
printf("NIE\n");
}
return 0;
}
luoguP2444_[POI2000]病毒的更多相关文章
- BZOJ 2938: [Poi2000]病毒 [AC自动机 拓扑排序]
2938: [Poi2000]病毒 题意:判断是否存在无限长的不含模式串的字符串.只有01. 建出套路DP的转移图,判断有环就行了 练习一下拓扑排序 #include <iostream> ...
- BZOJ_2938_[Poi2000]病毒_AC自动机
BZOJ_2938_[Poi2000]病毒_AC自动机 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们 ...
- P2444 [POI2000]病毒
P2444 [POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已 ...
- BZOJ 2938: [Poi2000]病毒
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 693 Solved: 360[Submit][Status][Di ...
- [洛谷P2444] [POI2000]病毒
洛谷题目链接:[POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会 ...
- [POI2000]病毒 --- AC自动机
[POI2000]病毒 题目描述: 二进制病毒审查委员会最近发现了如下的规律: 某些确定的二进制串是病毒的代码. 如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的. 现在委员会已经找 ...
- 【BZOJ2938】[Poi2000]病毒 AC自动机+DFS
[BZOJ2938][Poi2000]病毒 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码 ...
- BZOJ2938: [Poi2000]病毒(AC自动机)
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1678 Solved: 849[Submit][Status][D ...
- 洛谷 P2444 [POI2000]病毒 解题报告
P2444 [POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已 ...
随机推荐
- Unity游戏神经网络版坦克大战
基于遗传算法优化的神经网络来训练坦克AI是什么体验呢?下面有bulid好的demo. 包括window和安卓两个版本. 这是一个Unity项目. 下载链接:https://pan.baidu.com/ ...
- 字符串如何实现反转?python实现
今天和一个同事出去吃饭,突然话风转变,考了问我一个问题,他说哥,你知道字符串怎么反转吗? 我想了想,我擦,回家看我博客.作为一个资深开发,怎么可能被一个毛头小子问住了! 于是,我今天就稍微的整理了一下 ...
- 马蜂窝 IM 系统架构的演化和升级
今天,越来越多的用户被马蜂窝持续积累的笔记.攻略.嗡嗡等优质的分享内容所吸引,在这里激发了去旅行的热情,同时也拉动了马蜂窝交易的增长.在帮助用户做出旅行决策.完成交易的过程中,IM 系统起到了重要的作 ...
- 个人永久性免费-Excel催化剂功能第101波-批量替换功能(增加正则及高性能替换能力)
数据处理无小事,正如没有人活在真空理想环境一下,在数据分析过程中,也没有那么真空理想化的数据源可以使用,数据处理占据数据分析的80%的时间,每一个小小的改善,获益都良多.Excel查找替换,有其局限性 ...
- 个人永久性免费-Excel催化剂功能第94波-地图数据挖宝之搜索地图上的各种兴趣点数据(商铺名、地名、公共设施等)
终于来到最激动人心的地图应用场景,将地图上的有价值的兴趣点数据一网打尽,全都收录在自己的数据源中,这个价值有多大,想想都兴奋,无数的商业场景可供挖掘,假如你还无动于衷,那要好好反思下自己做的数据分析的 ...
- C#编程.异常处理(Exception Handling Statements)
C#语言包含结构化异常处理(Structured Exception Handling,SEH). throw The throw statement is used to signal the oc ...
- HashTable源码解读
一:总述 底层实现原理是用数组+链表,与HashMap一样,但HashTable是线程安全的,HashMap是非线程安全的 下面是其结构图(与hashMap类似) 二:属性说明 /** * The h ...
- Spring MVC中的 权限拦截定义 以及 权限拦截的研发步骤
权限拦截 (拦截器: 对请求进行区分) 1 实现的价值(作用) 用户未登录:访问没用登录的URL,拦截到以后 跳转回登录 用户未登录:访问登录的URL,直接放行到后续流程处理框架,进行后续的操作 用户 ...
- PHP Composer安装使用
1.安装composer curl -sS https:\\getcomposer.org/install | php 如果出现这样的提示,打开php.ini检查是否开启openssl扩展 2.下载成 ...
- .NET Core CSharp 中级篇 2-1 装箱与拆箱
.NET Core CSharp 中级篇 2-1 本节内容为装箱与拆箱 简介 装箱和拆箱是一个相对抽象的概念.你可以想象一下一堆满载货物的大卡车,他是由许多工人将货物集中堆放装入的,对于我们而言在没有 ...