題意:給幾個模式串,找26^m次方個串中出現這些模式串的個數。(即方案數。
題解:逆向思維,算是乙個簡單的容斥原理,找到所有不含有模式串的個數,剪掉。方法就是f[i][j]來統計在第i位(i<=m)時,匹配到第j個結點的方案數。最後求和,做差就好了。
起初總想不明白如何轉移的,最後想想它是把26個字母都遍歷一遍進行轉移,就差不多。
轉移方程:f[i+1][v] = (f[i+1][v] + f[i][j])%mod。v見下面的**。轉移的話,就是之前的方案數,加上這一次的方案數,同乙個i的迴圈中有時會很多跳回之前的結點,從而遞增。例如i == 3,由於失配指標,出現了f[4][0]了多次(例子與題目無關)從而遞加。
#include#include#includeusing namespace std;
const int maxn = 10010,alpha = 26,maxm = 110,mod = 10007;
int f[maxn],cnt[maxm][maxn],pc,ch[maxn][alpha];
char ptr[maxm];
bool flag[maxn];
void ins(char *s)
{ int cur = 0,n = strlen(s);
for (int i=0;iq;
for (int c=0;c做題時借鑑了此文:
bzoj 1030 文字生成器
題意 給出乙個n個單詞的字典,單詞長度 100 求長度為m的隨機字串中有多少個串至少包括乙個單詞 n 60,m 100 題解 好久沒有寫ac自動機啦,如今還記得模板真是難得 然而這似乎是trie圖?總之寫出來不差幾句話 首先至少包括乙個單詞這個條件不太好弄 那就轉化一下,求不含單詞的字串個數 然後就...
BZOJ 1030 文字生成器
1030 jsoi2007 文字生成器 time limit 1 sec memory limit 162 mb submit 4777 solved 1986 submit status discuss description jsoi交給隊員zyx乙個任務,編制乙個稱之為 文字生成器 的電腦軟體...
BZOJ 1030文字生成器
第一次做ac自動機 dp的題。因為前日做過一道字串dp題,這題做起來相對沒那麼困難一些。覺得一時間這題無法下手可以先試試這場div3的f題 題意 給你n個模式串,現在構造出m長度僅有26個字母的文字串,使其中至少包含1個模式串,問有多少個。思路 很容易想到dp,dpij,i表示構造到第幾位,j來列舉...