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