1030 JSOI2007 文字生成器

2022-05-12 09:52:30 字數 1936 閱讀 1394

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

請參考題解。。。

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

8 #include9 #include10 #include11 #include

12#define inf 1000000000

13#define maxn 60+5

14#define maxm 10000+5

15#define eps 1e-10

16#define ll long long

17#define mod 10007

18#define for0(i,n) for(int i=0;i<=(n);i++)

19#define for1(i,n) for(int i=1;i<=(n);i++)

20#define for2(i,x,y) for(int i=(x);i<=(y);i++)

21#define for3(i,x,y) for(int i=(x);i>=(y);i--)

22#define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)

23using

namespace

std;

24int

read()

27while(ch>='

0'&&ch<='9')

28return x*f;29}

30int n,m,sz=1,ans1,ans2=1;31

int a[6001][27],point[6001],q[6001],f[101][6001

];32

char s[101

];33

bool danger[6001

];34

void

ins()

41 danger[now]=1;42

}43void

acmach()

56} 57}

58void dp(int

x)66}67

}68intmain()

77acmach();

78 f[0][1]=1;79

for1(i,m)dp(i);

80for1(i,m)

81 ans2=(ans2*26)%mod;

82for1(i,sz)

83if(!danger[i])ans1=(ans1+f[m][i])%mod;

84 printf("

%d",(ans2-ans1+mod)%mod);

85return0;

86 }

view code

1030 JSOI2007 文字生成器

題目鏈結 題目大意 給出 n 個長度不超過 l 的字串,求有多少長度為 m 的字串 含有至少乙個之前給到的字串,字符集大小為 26 題解 至少1個提示我們使用補集轉化 總數明顯是26 m,現在計算有多少字串不含有任何乙個給出的字串 將給出字串建成ac自動機,然後標記所有結尾結點,及fail指標指向結...

1030 JSOI2007 文字生成器

分析 ac自動機 dp。正難則反,求滿足的,可以求出不滿足的,用總的減去。所以考慮如何就出所有的長度為m的串裡,沒有出現任何乙個單詞的個數。建立ac自動機,然後會有一些點是一定不能走的,這些點要麼是某些單詞的結尾,或者是包含了某些單詞 以它結尾的串的字尾是乙個單詞 然後f i j 表示當前有i位,在...

BZOJ1030 JSOI2007文字生成器

比起前面hnoi的gt考試,貌似這題是多模式串。然後我滾去學ac自動機了。發現還是很好寫的。ac自動機部分見筆記 搞出自動機之後,f i j 表示自動機上第i個節點匹配到第j個字元不可讀文字的數量,然後自己yy一下轉移 include include include define n 10005 d...