BZOJ1030 JSOI2007 文字生成器

2022-05-19 19:52:56 字數 1032 閱讀 7913

給出n個單詞,要求求出至少含乙個單詞的長度為n的字串數量

顯然直接求出是很難求的,那麼我們就求出總的字串數量,再求出不含任何乙個單詞的字串數量

然後相減就是答案

很像gt考試,不過變成了多個串,那麼就用ac自動機

設f[i][j]為長度為i時到達字典樹上第j個點的不含任何乙個單詞的字串數量

只要保證該狀態合理就可以繼承了

#include#include

#include

#include

#include

using

namespace

std;

int mod=10007

;struct

trie

t[11000];int

tot,root;

void clean(int

x)char st[110

];void

bt()

t[x].s=1;}

int list[11000

];void

bfs()

list[++tail]=son;

}head++;

}}int f[110][11000

];int

main()

bfs();

memset(f,

0,sizeof

(f));

int sum=1

;

for(int i=1;i<=m;i++) sum=(sum*26)%mod;

f[0][0]=1

;

for(int u=1;u<=m;u++)}}

}int ans=0

;

for(int i=0;i<=tot;i++) if(t[i].s==0) ans=(ans+f[m][i])%mod;

printf(

"%d\n

",((sum-ans)%mod+mod)%mod);

return0;

}

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...