題目描述 description
jsoi交給隊員zyx乙個任務,編制乙個稱之為「文字生成器」的電腦軟體:該軟體的使用者是一些低幼人群,他們現在使用的是gw文字生成器v6版。該軟體可以隨機生成一些文章―――總是生成一篇長度固定且完全隨機的文
章—— 也就是說,生成的文章中每個位元組都是完全隨機的。如果一篇文章中至少包含使用者們了解的乙個單詞,那麼我們說這篇文章是可讀的(我們稱文章a包含單詞b,當且僅當單詞b是文章a的子串)。但是,即使按照這樣的標準,使用者現在使用的gw文字生成器v6版所生成的文章也是幾乎完全不可讀的?。zyx需要指出gw文字生成器 v6生成的所有文字中可讀文字的數量,以便能夠成功獲得v7更新版。你能幫助他嗎?
輸入描述 input description
輸入檔案的第一行包含兩個正整數,分別是使用者了解的單詞總數n (<= 60),gw文字生成器 v6生成的文字固定長度m;以下n行,每一行包含乙個使用者了解的單詞。這裡所有單詞及文字的長度不會超過100,並且只可能包含英文大寫字母a..z
輸出描述 output description
乙個整數,表示可能的文章總數。只需要知道結果模10007的值。
樣例輸入 sample input
2 2樣例輸出 sample outputab
100資料範圍及提示 data size & hint
肯定是乙個ac自動機類題。典型的ac自動機上dp類題。
首先把這些單詞都放在一棵trie樹上,單詞結尾打一下danger標記,本題的題目意思就是說在ac自動機上走m步,使得每一步都不走在danger節點的方案數。
那麼我們就開始dp 設f(i,j)表示現在在第i號點,走了j步的方案數。轉移的話就比較簡單了。f(i,j)可以轉移到f(ch[i][k],j+1),前提是ch[i][k]不是危險節點。本題我用的是新版ac自動機,對每乙個轉移都一視同仁,不用管什麼走fail邊。
1 #include2 #include3 #include4 #include5 #include6 #include7view codeusing
namespace
std;
8 typedef long
long
ll;9 typedef pairpii;
10#define mem(a,b) memset(a,b,sizeof(a))
11 inline int
read()
1215
while(isdigit(c))
16return x*f;17}
18const
int maxn=6010,mod=10007;19
int n,m,tot,ch[maxn][30],fail[maxn],danger[maxn],dp[110][maxn],ans,sum=1;20
bool vis[110
][maxn];
21char s[110
];22
int id(char c)
23void insert(char *s)
2432 danger[now]=1;33
}34void
getfail()
3545
q.push(v);
46int j=fail[u];
47while(j && !ch[j][i])j=fail[j];
48 fail[v]=ch[j][i];
49 danger[v]|=danger[fail[v]];50}
51}52}
53int
main()
5467
for(int i=0;i<=tot;i++)if(!danger[i])ans=(ans+dp[m][i])%mod;
68for(int i=1;i<=m;i++)sum=(sum*26)%mod;
69 printf("
%d\n
",(sum-ans+8*mod)%mod);
70return0;
71 }
BZOJ1030 JSOI2007文字生成器
比起前面hnoi的gt考試,貌似這題是多模式串。然後我滾去學ac自動機了。發現還是很好寫的。ac自動機部分見筆記 搞出自動機之後,f i j 表示自動機上第i個節點匹配到第j個字元不可讀文字的數量,然後自己yy一下轉移 include include include define n 10005 d...
bzoj1030 JSOI2007 文字生成器
傳送門 思路 直接算好像比較困難,所以考慮先算不可讀的串的個數,再拿總串數去減。不可讀的串的數量就是在ac自動機上走m步而不經過結尾節點 包括結尾點和fail指向結尾點的節點 的路徑條數。這個怎麼求呢?設f i j 表示走i步,現在在j號節點的路徑條數。那麼f i j 可以轉移f i 1 son j...
bzoj1030 JSOI2007 文字生成器
time limit 1 sec memory limit 162 mb submit 2891 solved 1193 submit status discuss jsoi交給隊員zyx乙個任務,編制乙個稱之為 文字生成器 的電腦軟體 該軟體的使用者是一些低幼人群,他們現在使用的是gw文字生成器v...