题意

给定多个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]病毒的更多相关文章

  1. BZOJ 2938: [Poi2000]病毒 [AC自动机 拓扑排序]

    2938: [Poi2000]病毒 题意:判断是否存在无限长的不含模式串的字符串.只有01. 建出套路DP的转移图,判断有环就行了 练习一下拓扑排序 #include <iostream> ...

  2. BZOJ_2938_[Poi2000]病毒_AC自动机

    BZOJ_2938_[Poi2000]病毒_AC自动机 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们 ...

  3. P2444 [POI2000]病毒

    P2444 [POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已 ...

  4. BZOJ 2938: [Poi2000]病毒

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 693  Solved: 360[Submit][Status][Di ...

  5. [洛谷P2444] [POI2000]病毒

    洛谷题目链接:[POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会 ...

  6. [POI2000]病毒 --- AC自动机

    [POI2000]病毒 题目描述: 二进制病毒审查委员会最近发现了如下的规律: 某些确定的二进制串是病毒的代码. 如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的. 现在委员会已经找 ...

  7. 【BZOJ2938】[Poi2000]病毒 AC自动机+DFS

    [BZOJ2938][Poi2000]病毒 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码 ...

  8. BZOJ2938: [Poi2000]病毒(AC自动机)

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1678  Solved: 849[Submit][Status][D ...

  9. 洛谷 P2444 [POI2000]病毒 解题报告

    P2444 [POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已 ...

随机推荐

  1. SQL SERVER 活动监视-sys.dm_exec_requests

    sys.dm_exec_requests (Transact-SQL)应用: 针对 SQL Server 内正在执行的每个请求返回一行.sys.dm_exec_connections.sys.dm_e ...

  2. 第一届合天杯河北科技大学网络安全技术大赛 web6 writeup

  3. 【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 下

    我们接着上一节来讲: 在熟悉动态增加组织或修改配置的步骤后,我们就可以使用java的api来完成动态增加组织或修改配置了: 废话不多说,直接上干货: 1,预制条件 org3的证书以及组织3的MSP详情 ...

  4. SpringBoot2.0集成WebSocket,实现后台向前端推送信息

    感谢作者,支持原创: https://blog.csdn.net/moshowgame/article/details/80275084 什么是WebSocket? WebSocket协议是基于TCP ...

  5. python的socket模块

    sk.bind(address) s.bind(address) 将套接字绑定到地址.address地址的格式取决于地址族.在AF_INET下,以元组(host,port)的形式表示地址. sk.li ...

  6. 重复造轮子系列——基于Ocelot实现类似支付宝接口模式的网关

    重复造轮子系列——基于Ocelot实现类似支付宝接口模式的网关 引言 重复造轮子系列是自己平时的一些总结.有的轮子依赖社区提供的轮子为基础,这里把使用过程的一些觉得有意思的做个分享.有些思路或者方法在 ...

  7. PowerBI Desktop中如何能实现点击按钮跳转到相应报表页

    我看到过一个报表首页,它将其他报表业存为一种类似URL的方式,按住Ctrl点击鼠标右键即可跳到相应的报表业. 当时我理解成了是“分页报表”的功能实现的,弄明白后发现是由按钮+书签的方式是实现的. 实现 ...

  8. PHP使用array_unique对二维数组去重处理

    去重,点这里,东西是好东西,就是有点懒.莫见怪

  9. github项目readme.md文件如何编写

    参考链接:http://blog.csdn.net/Bone_ACE/article/details/48318675

  10. java - java集合类

    1.接口实现类 ①List List list1 = new ArrayList(); List list2 = new LinkedList(); ②Set Set<String> se ...