bzoj1030 JSOI2007 文字生成器

2021-07-04 03:06:39 字數 584 閱讀 1685

傳送門:

思路:直接算好像比較困難,所以考慮先算不可讀的串的個數,再拿總串數去減。

不可讀的串的數量就是在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版。該軟體可以隨機生成一些文章 總是生成一篇長度固定且完全隨機的文章 也就是說,生成的文章中每個位元組都是完全隨機的。如果一篇文章中至少包含使用者們了解的乙個單詞,...