bzoj 1030 文字生成器 AC自動機 dp

2021-08-10 14:56:41 字數 811 閱讀 4273

解題思路:

題目要求至少含有乙個單詞的方案數,可以轉化成總方案數(26m

)減去不含有單詞的方案數。

接下來把單詞插到ac自動機上進行dp。

f[i][j]表示走到ac自動機的j號結點當前單詞長度為i的方案數。

轉移就是列舉下一位的26個字母,看是否可行(如果下一位在j的子節點中出現,若被標記為單詞的結尾,就不能轉移)。

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using namespace std;

int getint()

const int l=105,n=60,p=10007;

struct node

tr[n*l];

int n,m,tot=1,f[l][n*l];

char s[l];

queueq;

void insert()

tr[po].end=true;

}void build_fail()

}}void solve()}}

for(int i=1;i<=tot;i++)

if(!tr[i].end)ans=((ans-f[m][i])%p+p)%p;

coutbuild_fail();

solve();

return

0;}

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來列舉...