正解:AC自动机

解题报告:

传送门!

首先看到这种题目二话不说先把trie树和fail指针建立起来

然后就想鸭,如果我们想让模式串和文本串尽量不能匹配,就要想办法让它跳fail指针,而不是继续往下走,是趴

然后如果我可以一直跳fail指针始终没有到达文本串的结尾,就说明是可以构造一个无限长的字符串的对趴

于是就变成了,有一个图(trie树+fail指针指向的边就构成了一个图了嘛),如果能找到一个不包含文本串结尾节点的环就说明欧克,否则无法构造

就over辣!

昂还有个小技巧昂,就是在dfs找环的时候可以记录下去过什么点辣就可以不要重复去辣

#include<bits/stdc++.h>
using namespace std;
#define ll int
#define rg register
#define rp(i,x,y) for(rg ll i=x;i<=y;++i) const ll L=;
ll n,cnt;
bool vis[L+],instck[L+];
struct tre{ll to[],fil;bool ed;tre(){to[]=to[]=;ed=;fil=;}}tr[L+]; inline ll read()
{
rg char ch=getchar();rg ll x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
inline void bd(string x)
{
ll lth=x.length()-,nw=;
rp(i,,lth){if(!tr[nw].to[x[i]^''])tr[nw].to[x[i]^'']=++cnt;nw=tr[nw].to[x[i]^''];}
tr[nw].ed=;
}
inline void fl()
{
queue<ll> Q;rp(i,,)if(tr[].to[i])Q.push(tr[].to[i]);
while(!Q.empty())
{
ll nw=Q.front();Q.pop();tr[nw].ed|=tr[tr[nw].fil].ed;
rp(i,,){if(tr[nw].to[i])tr[tr[nw].to[i]].fil=tr[tr[nw].fil].to[i],Q.push(tr[nw].to[i]);else tr[nw].to[i]=tr[tr[nw].fil].to[i];}
}
}
inline void dfs(ll x)
{
if(tr[x].ed)return;
if(instck[x]){printf("TAK");exit();}
if(vis[x])return;instck[x]=vis[x]=;
rp(i,,)if(tr[x].to[i])dfs(tr[x].to[i]);
instck[x]=;
} int main()
{
n=read();rp(i,,n){string x;cin>>x;bd(x);}fl();dfs();printf("NIE\n");
return ;
}

这儿是代码!

洛谷P2444 病毒 [POI2000] AC自动机的更多相关文章

  1. 洛谷P2444 病毒【AC自动机】

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

  2. 【洛谷 P2444】 [POI2000]病毒(AC自动机)

    题目链接 这么多字符串,肯定是自动机啦. 先建出AC自动机,然后怎么表示一个安全代码没有病毒代码呢? 就是存在一条路径不经过有病毒代码段结尾的节点呗. 所以呢?有环啊!dfs一下救星了. #inclu ...

  3. 洛谷-P5357-【模板】AC自动机(二次加强版)

    题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,还是要解决跳fail边产生的重复访问,但 ...

  4. 洛谷P3966 单词 [TJOI2013] AC自动机

    正解:AC自动机 解题报告: 传送门! 先来提供一个40pts错解QAQ 首先看到这题就会想到AC自动机板子题2鸭!然后就照着那题的套路打一下,随便改一点儿,简单来说就是每次经过一个节点都要++,然后 ...

  5. 洛谷P3966 [TJOI2013]单词(AC自动机)

    题目描述 小张最近在忙毕设,所以一直在读论文.一篇论文是由许多单词组成但小张发现一个单词会在论文中出现很多次,他想知道每个单词分别在论文中出现了多少次. 输入输出格式 输入格式: 第一行一个整数N,表 ...

  6. 洛谷2414(构建ac自动机fail树dfs序后遍历Trie树维护bit及询问答案)

    要点 这是一道蔡队题,看我标题行事 任意询问y串上有多少个x串,暴力找每个节点是不是结尾肯定是炸的,考虑本质:如果某节点是x的结尾,根据ac自动机的性质,x一定是此(子)串后缀.又有每个Trie节点的 ...

  7. 病毒[POI2000](AC自动机+搜索)

    题目链接:病毒[POI2000] 我们假设已经有一个无限长的串满足要求,那如果我们拿它去匹配会发生什么? 它会一直在Trie树和fail树上转圈,一定经过根节点且不会经过病毒字符串结束的节点. 所以如 ...

  8. 洛谷-P3796-【模板】AC自动机(加强版)

    题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,在fail边的基础上再加一个last边, ...

  9. 洛谷 - P2444 - 病毒 - AC自动机

    https://www.luogu.org/problemnew/show/P2444 有点恶心,不太明白fail的意义. #include<bits/stdc++.h> using na ...

随机推荐

  1. SaltStack 批量执行脚本

    这里演示如何使用 salt-master 对多台 salt-minion 批量执行脚本,步骤如下: [root@localhost ~]$ cat /srv/salt/top.sls # 先定义入口配 ...

  2. 使用 urllib 设置代理服务

    (1) 如果我们一直用同一个IP去请求同一个网站上的网页,久了之后可能会被该网站服务器屏蔽,因此我们可以使用代理IP来发起请求,代理实际上指的就是代理服务器(2) 当我们使用代理IP发起请求时,服务器 ...

  3. ie11中报SCRIPT1003: 缺少 ':'的错误?

    兼容性?IE的兼容性…… 由于“叶叶综合征发作”,导致有段时间都在自我否定中,故而引发一系列的不美好.幸好,自己还有超强的恢复能力,一切都在往好的方向发展吧. 直接进入 “可怕的IE兼容”主题: 第一 ...

  4. 【delphi】Delphi过程、函数传递参数的八种方式

    Delphi过程函数传递参数的八种方式

  5. zip&unzip范例

    范例: zip命令可以用来将文件压缩成为常用的zip格式.unzip命令则用来解压缩zip文件. 1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip: # zip -r y ...

  6. 【转载】经典.net面试题目【为了笔试。。。。。】

    . 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成员 ...

  7. 【开源整理】.Net开源项目资源大全

    汇总了.NET平台开源的工具类库,新的内容在不断更新中.内容借鉴了博客园.伯乐在线.GitHub等平台. (注:下面用 [$] 标注的表示收费工具,但部分收费工具针对开源软件的开发/部署/托管是免费的 ...

  8. jQuery事件处理(七)

    1.自定义事件(用户手动trigger的一般都是自定义事件) trigger: function( event, data, elem, onlyHandlers ) { var i, cur, tm ...

  9. ubuntu 14.04 LTS 右键菜单解压压缩包时出错

    先卸载rar sudo apt-get remove rar 再安装unrar sudo apt-get install unrar

  10. C程序设计语言习题(3-5)

    编写函数itob(n,s,b),将整数n转换为以b为底的数,并将转换结果以字符的形式保存到字符串s中.e.g.itob(n,s,16)把整数n格式化为十六进制整数保存在s中. #include< ...