• [POI2000]病毒 --- AC自动机


    [POI2000]病毒

    题目描述:

    二进制病毒审查委员会最近发现了如下的规律:

    某些确定的二进制串是病毒的代码。

    如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。

    现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码。

    示例:如果{011, 11, 00000}为病毒代码段,

    那么一个可能的无限长安全代码就是010101…。

    如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码。

    任务:请写一个程序:

    读入病毒代码,判断是否存在一个无限长的安全代码;

    输入格式:

    在文本文件WIR.IN的第一行包括一个整数n (n2000) ,表示病毒代码段的数目。

    以下的n行每一行都包括一个非空的01字符串——就是一个病毒代码段。

    所有病毒代码段的总长度不超过30000。

    输出格式:

    输出:

    TAK——假如存在这样的代码;

    NIE——如果不存在。

    非常基础的AC自动机,考验理解。

    能在AC自动机中转移 ---> 可以添加字符

    因此 长度无限的字符串 ---> 能在AC自动机中无限地转移 --> AC自动机中有环

    但注意到一些病毒串无法被匹配;

    将代表病毒串的结尾的节点及其后继fail节点全部打上标记即可。

    代码在此

  • 相关阅读:
    Linux 网络编程六(socket通信UDP版)
    Redis 集群方案介绍
    华为交换机STP 根ID优先级设置
    Pacemaker+Corosync搭建PostgreSQL集群
    SpookyOTP
    世界级的开源项目:TiDB 如何重新定义下一代关系型数据库
    TiDB
    Fiddler显示响应时间 显示服务器IP
    DNS记录类型名单
    Django models中关于blank与null
  • 原文地址:https://www.cnblogs.com/reverymoon/p/8864725.html
Copyright © 2020-2023  润新知