题目传送门

思路:

  要求构建一个字符串,使得这个字符串不包含给出的任意一个单词。

  如果我们已经构建出了一个安全代码,放在ac自动机上跑,那么我们必定不能得到任何一个字符串,此时我们得到的fail指针必定是在一个环上循环,并且这个环不包含单词的末尾。

  我们也知道fail指针最后是会指回0点的,那么此时我们其实就是要求一个环,这个换不包含单词末尾即可。加一个优化就是,如果fail指针指向的地方是末尾,那么这个地方等同于末尾。

#include<bits/stdc++.h>
#define clr(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=;
char s[maxn],p[maxn];
int trie[maxn][],cntword[maxn],fail[maxn],cnt=;
int n;
bool vis[maxn],ins[maxn];
void insert(char *s){
int root=;
int si=strlen(s);
for(int i=;i<si;i++)
{
int Next=s[i]-'';
if(!trie[root][Next])trie[root][Next]=++cnt;
root=trie[root][Next];
}
cntword[root]++;
}
void getfail(){
queue<int >q;
for(int i=;i<=;i++)
{
if(trie[][i]){
q.push(trie[][i]);
}
}
while(!q.empty())
{
int now=q.front();
q.pop();
for(int i=;i<=;i++)
{
if(trie[now][i]){
fail[trie[now][i]]=trie[fail[now]][i];
if(cntword[fail[trie[now][i]]])cntword[trie[now][i]]=;//如果fail指针指向的是病毒的末尾,那么这个也是病毒
q.push(trie[now][i]);
}else{
trie[now][i]=trie[fail[now]][i];
}
}
}
} void init(){
clr(trie,);
clr(cntword,);
clr(ins,),clr(vis,);
}
bool dfs(int u)
{
ins[u]=;
for(int i=;i<=;i++)
{
int v=trie[u][i];
if(ins[v]==)return true;
if(vis[v]||cntword[v])continue;
vis[v]=;
if(dfs(v))return true;
}
ins[u]=;
return false;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%s",p);
insert(p);
}
fail[]=;
getfail();
if(dfs())puts("TAK");
else puts("NIE"); }

最新文章

  1. Android之Inflate()
  2. 学习mongo系列(八)密码与权限
  3. Effective C++:条款27——条款
  4. ubuntu 安装遇到黑屏
  5. HDU - 2290 Find the Path(最短路)
  6. websocket 70K连接测试
  7. 创建文件DSN
  8. 浅谈 maxMemory , totalMemory , freeMemory 和 OOM 与 native Heap
  9. 1171: lfx捧杯稳啦!
  10. 【BZOJ2655】calc DP 数学 拉格朗日插值
  11. tk.mybatis通用插件updateByPrimaryKeySelective无法自动更新ON UPDATE CURRENT_TIMESTAMP列的解决办法
  12. Hive中MetaServer与HiveServer2的应用
  13. js--函数声明和函数表达式--执行顺序
  14. vue-cli中理不清的assetsSubDirectory 和 assetsPublicPath
  15. C# 条件表达式max=(a&gt;b)?a:b;含义
  16. Spring MVC之DispatcherServlet初始化详解
  17. 1L - ASCII码排序
  18. Moscow Subregional 2013. 部分题题解 (6/12)
  19. STA分析(四) lib model
  20. Python:在windows下创建虚拟环境

热门文章

  1. asp.net web api 2框架揭秘文摘
  2. Arch Linux freemind中文乱码
  3. 编写高质量代码改善C#程序的157个建议——建议121:为应用程序设定运行权限
  4. linux和windows下的命令
  5. Backup--备份基础理论
  6. .net core i上 K8S(七).netcore程序的服务发现
  7. 2、ASP .NETCore 2.0之视图
  8. sharepoint用户信息同步出错
  9. mongodb driver2.5环境注意事项
  10. .net 抽象类(abstract)和接口(interface)区别