洛谷 P2444 POI2000 病毒 解題報告

2022-04-30 03:39:08 字數 989 閱讀 6021

二進位制病毒審查委員會最近發現了如下的規律:某些確定的二進位制串是病毒的**。如果某段**中不存在任何一段病毒**,那麼我們就稱這段**是安全的。現在委員會已經找出了所有的病毒**段,試問,是否存在乙個無限長的安全的二進位制**。

示例:例如如果為病毒**段,那麼乙個可能的無限長安全**就是010101…。如果為病毒**段,那麼就不存在乙個無限長的安全**。

任務:請寫乙個程式:

1.在文字檔案wir.in中讀入病毒**;

2.判斷是否存在乙個無限長的安全**;

3.將結果輸出到檔案wir.out中。

在文字檔案wir.in的第一行包括乙個整數n(n\le 2000)(n≤2000),表示病毒**段的數目。以下的n行每一行都包括乙個非空的01字串——就是乙個病毒**段。所有病毒**段的總長度不超過30000。

tak——假如存在這樣的**;

nie——如果不存在。

越想越亂我是得多菜啊

多串匹配,我們選擇ac自動機,要求不能到達單詞末尾且無限長度

等價於在tire圖上尋找經過根的環

弄\(fail\)指標的時候可以多把末尾打一些標記以剪枝

尋找環用tarjan

code:

#include #include const int n=3e5+10;

int ch[n][2],is[n],fail[n],tot,n,q[n],l,r,ans=1;

char c[n];

void init()

is[now]=1;

}void build()

else ch[now][i]=ch[fail[now]][i];}}

}int in[n],used[n],flag=0;

void dfs(int now)

in[now]=0;

}int main()

2018.8.28

洛谷P2444 POI2000 病毒

二進位制病毒審查委員會最近發現了如下的規律 某些確定的二進位制串是病毒的 如果某段 中不存在任何一段病毒 那麼我們就稱這段 是安全的。現在委員會已經找出了所有的病毒 段,試問,是否存在乙個無限長的安全的二進位制 示例 例如如果為病毒 段,那麼乙個可能的無限長安全 就是010101 如果為病毒 段,那...

題解 洛谷P2444 POI2000 病毒

給定n 2000 個01串,總長度不超過30000,問是否存在乙個無限長的01串不包含這n個串。這是一道ac自動機題目,需要對ac自動機 fail樹 trie圖有概念。將n個串建立ac自動機,標記每個字串的終結點以及它們在fail樹上的所有子節點為無效節點,問題就轉換成了trie圖上是否存在乙個從0...

洛谷P2444 病毒(AC自動機變形)

作為一道蹂躪了我一天的題 我也沒啥好說的了qaq 思路概述 我們知道,ac自動機是一種多模字串匹配演算法。構造 trie 樹 後,在模式串末尾一位的結點作上標記。平常的 ac自動機 是盡量能多接觸到這些標記,使總值最大。本題倒是有點奇葩,要構造乙個可行的無限長文字串,使沒有任何子串為給出模式串中的乙...