BZOJ1212 L語言(AC自動機)

2022-03-20 08:02:23 字數 822 閱讀 5385

bzoj

很自然的,既然要匹配單詞,那就全部都丟到\(ac\)自動機裡面去

現在想想怎麼匹配

先是\(ac\)自動機正常的匹配

如果此時這個位置能夠匹配上乙個串

我們就需要判斷一下這個串覆蓋到這個文字串中

它的前一位是否恰好被覆蓋

如果有的話

我們也不能直接計算

因為可能是其他不同的串拼起來的

所以,就開乙個陣列差分

表示當前位置可以匹配

最後,對於每個文字串

從前往後掃一遍差分陣列

直到有\(0\)的地方就直接輸出就行啦

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

inline int read()

struct node

t[5000];

int n,m,tot;

char s[2000000];

int cc[2000000];

bool vis[2000000];

void insert(char *s)

t[now].lst=1;

}void getfail()

}int main()

getfail();

while(m--)

}for(int i=1,tot=0;i<=l;++i)

printf("%d\n",lst);

} return 0;

}

bzoj1212 L語言 遞推 Tire

這道題目寫得好暴力可能都能過吧 亂說的別理他 大概用tire做到o n len 其中len表示乙個單詞的長度。實際上也非常好寫,如果用刷表法也就30行 一不小心把tire開大了mle了一下然後差點刷到第一頁 這也能拿出來說,就這點出息 ac 如下 include include include de...

AC 自動機 HNOI2004 L語言

題目鏈結 思路挺簡單的,就是每次在fail樹上跳都是往乙個字首,且說明從a i 結尾的乙個字尾和這個字首匹配上了,如果這個字首是乙個單詞的話,我們就看除去匹配上的字尾的剩餘部分是不是匹配上了 是的話,就說明前i長的句子都是由單詞組成的 不知道為啥,這些ac自動機的題做起來都覺得挺簡單的 includ...

洛谷 P 2292 L語言 AC自動機

一道比較簡單的題,結果自己腦補了各種奇葩 錯誤 的判斷,搞了乙個多小時。題意 用已知字典去識別乙個串,求最長可識別字首 指能將此字首分解為字典裡面的單詞 思路 建好ac自動機,記錄好每個點所代表的字串的長度 拿要匹配的串從前往後匹配,若某個點完全不能匹配,直接退出 可以不考慮這個 處理好什麼叫 可以...