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自動機,記錄好每個點所代表的字串的長度 拿要匹配的串從前往後匹配,若某個點完全不能匹配,直接退出 可以不考慮這個 處理好什麼叫 可以...