BZOJ3530 數數(AC自動機,動態規劃)

2022-03-20 08:02:23 字數 925 閱讀 7888

bzoj

很套路的\(ac\)自動機+\(dp\)

首先,如果長度小於\(n\)

就不存在任何限制

直接大力\(dp\)

然後強制限制不能走到帶有標記的點上面

如果長度恰好為\(n\)的長度

那麼,要考慮是否恰好卡在範圍裡面

於是\(dp\)狀態多記一維

表示是否卡在範圍裡面

最後求一下和就行啦

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define max 2000

#define mod 1000000007

struct node

t[max];

int tot,m;

char n[max],ch[max];

int f[max][max][2],g[max][max];

void insert(char *s)

t[now].lt=1;

}void getfail()

}int main()

}for(int i=1;ifor(int j=0;j<=tot;++j)

ans=(ans+g[i][j])%mod;

f[0][0][1]=1;

for(int i=0;ifor(int u=0;u<=tot;++u)

if(!t[u].lt)

}for(int i=0;i<=tot;++i)

ans=(ans+f[l][i][0])%mod,ans=(ans+f[l][i][1])%mod;

printf("%lld\n",ans);

return 0;

}

BZOJ3530 數數(AC自動機,動態規劃)

bzoj 很套路的ac 自動機 dp 首先,如果長度小於n 就不存在任何限制 直接大力dp 然後強制限制不能走到帶有標記的點上面 如果長度恰好為 n 的長度 那麼,要考慮是否恰好卡在範圍裡面 於是d p狀態多記一維 表示是否卡在範圍裡面 最後求一下和就行啦 include include inclu...

AC自動機 建立nlogn個AC自動機

string set queries 題意 給你3種操作,1 加入乙個串到集合中。2 刪除集合中的某乙個串 3 查詢集合中的字串在給定的字串種出現幾次。同乙個串可重複 解法 建立多個ac自動機,用二進位制分組來處理。加入給你21個串 分為 16 4 1,再新增乙個串的時候,即21 1,22 16 4...

AC自動機及字尾自動機

ac自動機是一種基於trie樹的演算法,其本質和kmp上的處理很相似。trie樹結構 kmp轉移思路 ac自動機組要由三個部分組成 trie樹的建立 fail指標的匹配 對ac自動機的詢問 每次建立自動機會有一次初始化 ac自動機類 struct node node結構體 struct ac voi...