傳送門:
思路:直接算好像比較困難,所以考慮先算不可讀的串的個數,再拿總串數去減。
不可讀的串的數量就是在ac自動機上走m步而不經過結尾節點(包括結尾點和fail指向結尾點的節點)的路徑條數。
這個怎麼求呢?
設f[i][j]表示走i步,現在在j號節點的路徑條數。
那麼f[i][j]可以轉移f[i+1][son[j][k]]。
就是i+1個字元為k的狀態。
最後把所有f[m][i]累和就是不可讀的串。
#include#include#includeconst int maxn=6000,maxm=105,mod=10007;
using namespace std;
int n,m,f[maxm][maxn],ans1=1,ans2;char s[maxn];
struct ac_dfa{
int tot,ch[maxn][26],fail[maxn],q[maxn],head,tail;bool dang[maxn];
void insert(){
int p=0,len=strlen(s);
for (int i=0;i
BZOJ1030 JSOI2007文字生成器
比起前面hnoi的gt考試,貌似這題是多模式串。然後我滾去學ac自動機了。發現還是很好寫的。ac自動機部分見筆記 搞出自動機之後,f i j 表示自動機上第i個節點匹配到第j個字元不可讀文字的數量,然後自己yy一下轉移 include include include define n 10005 d...
bzoj1030 JSOI2007 文字生成器
time limit 1 sec memory limit 162 mb submit 2891 solved 1193 submit status discuss jsoi交給隊員zyx乙個任務,編制乙個稱之為 文字生成器 的電腦軟體 該軟體的使用者是一些低幼人群,他們現在使用的是gw文字生成器v...
bzoj1030 JSOI2007 文字生成器
jsoi交給隊員zyx乙個任務,編制乙個稱之為 文字生成器 的電腦軟體 該軟體的使用者是一些低幼人群,他們現在使用的是gw文字生成器v6版。該軟體可以隨機生成一些文章 總是生成一篇長度固定且完全隨機的文章 也就是說,生成的文章中每個位元組都是完全隨機的。如果一篇文章中至少包含使用者們了解的乙個單詞,...