以後凡是在乙個中出現》=1次的題就直接轉0次用容斥好了、
然後剩下的就是怎麼找乙個單詞也不出現的文字的個數了
顯然,這種計數類問題需要用dp ,而且我們需要知道所有單詞會為我們新增字母造成影響,所以需要用ac自動機,跳過所有標記的單詞
以前是寫的指標ac自動機,但它不好寫而且巨慢、 所以換了陣列
要注意用0表示null 1表示root 為了方便,我們將0的所有下乙個賦為root 同時這個失配指標是指向最近的和自己相同的字母 root可表示所有字母..
而且失配是單詞這個點也不能取,,因為
然後sp陣列開小了溢位導致f陣列儲存資訊錯誤、、查了1.5h才查出來
碼:
#include#include#include#includeusing namespace std;
queueq;
int sz=1,ans1,ans2,n,m,i,j,sp[7000],ch[7000][27],dc[7000],f[105][7000];
char str[105];
#define p 10007
void ins()
{ int l=strlen(str),i,o=1;
for(i=0;i
文字生成器
給出 n 個單詞和文字長度 m 求有多少文字滿足其內至少包含乙個單詞,答案對 10007 取餘。直接求滿足的文字比較困難,我們考慮求答案的補集,也就是不包含任何乙個單詞的文字串的數量。對於這個答案我可以用 dp 求解,但考慮對單詞的查詢我們需要用 a c自動機解,因此題目就比較明顯了,ac 自動機上...
bzoj 1030 文字生成器
題意 給出乙個n個單詞的字典,單詞長度 100 求長度為m的隨機字串中有多少個串至少包括乙個單詞 n 60,m 100 題解 好久沒有寫ac自動機啦,如今還記得模板真是難得 然而這似乎是trie圖?總之寫出來不差幾句話 首先至少包括乙個單詞這個條件不太好弄 那就轉化一下,求不含單詞的字串個數 然後就...
BZOJ 1030 文字生成器
1030 jsoi2007 文字生成器 time limit 1 sec memory limit 162 mb submit 4777 solved 1986 submit status discuss description jsoi交給隊員zyx乙個任務,編制乙個稱之為 文字生成器 的電腦軟體...