BZOJ 1030 JSOI2007 文字生成器

2022-05-23 02:27:11 字數 1867 閱讀 6591

time limit: 1 sec  memory limit: 162 mb

submit: 2624  solved: 1087

[submit][status][discuss]

jsoi交給隊員zyx乙個任務,編制乙個稱之為「文字生成器」的電腦軟體:該軟體的使用者是一些低幼人群,他們現在使用的是gw文字生成器v6版。該軟體可以隨機生成一些文章―――總是生成一篇長度固定且完全隨機的文章—— 也就是說,生成的文章中每個位元組都是完全隨機的。如果一篇文章中至少包含使用者們了解的乙個單詞,那麼我們說這篇文章是可讀的(我們稱文章a包含單詞b,當且僅當單詞b是文章a的子串)。但是,即使按照這樣的標準,使用者現在使用的gw文字生成器v6版所生成的文章也是幾乎完全不可讀的。 zyx需要指出gw文字生成器 v6生成的所有文字中可讀文字的數量,以便能夠成功獲得v7更新版。你能幫助他嗎?

輸入檔案的第一行包含兩個正整數,分別是使用者了解的單詞總數n (<= 60),gw文字生成器 v6生成的文字固定長度m;以下n行,每一行包含乙個使用者了解的單詞。 這裡所有單詞及文字的長度不會超過100,並且只可能包含英文大寫字母a..z  。

乙個整數,表示可能的文章總數。只需要知道結果模10007的值。

2 2a

b100

題解:acdp的入門題

補集轉換,變為求有danger的點的數量。一開始總是轉不過彎來,現在懂了:窩萌設串字首為考慮的階段,那麼在這個階段要幹什麼呢?要"推進一步自動機"對不對,那麼再加上乙個維數表示考慮到了自動機上的節點就行了,具體實現的時候窩是直接寫在了自動機裡的f[m]。

然後再說一下這個endmark,可以把ta想象成乙個病毒,一開始在所有的end_node裡,在窩萌getfail的時候,會順著得到的fail指標傳播,然後就沒有然後了。。。具體實現就在getfail的時候維護一下就行。

自動機還是乙個挺神奇的東西,哪天補補pam玩玩。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

#define pau putchar(' ')

9#define ent putchar('\n')

10#define trans(p) while(p&&!p->tx[c])p=p->fail;if(!p)p=root;

11using

namespace

std;

12const

int maxn=10000+10,maxnode=10000+10,sig=26,inf=-1u>>1,mod=10007;13

struct

node

15 }ac[maxnode],*nodecnt=ac,*root=nodecnt++;

16 node*get(node*x)

17 node*tran(node*x,int c)

18void insert(char*s)x->v=true;return;25

}26void

getfail()

34 }return;35

}36void dp(int

x)41 }return;42

}43char s[maxn];int

n,m;

44 inline int

read()

50 inline void write(int

x)if(x<0)putchar('

-'),x=-x;

52int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;53

for(int i=len-1;i>=0;i--)putchar(buf[i]+'

0');return;54

}55intmain()

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