題目鏈結
蒟蒻今天終於學會了ac自動機,感覺很穩
(後一句愚人節快樂)
這題開乙個f[i][j][k]表示有沒有受到限制,正在列舉第j位,來到了ac自動機的第k個節點
的方案數
隨後可以刷表更新
注意如果是在列舉第一位的話注意前導0
#include#include#include
#include
#include
#include
#define maxl 2000
#define maxu 10
#define mod 1000000007
using
namespace
std;
inline
long
long
read()
while
(isdigit(ch))
return num*f;
}inline
int count(int i)
int tree[maxl*maxu][maxu];
int fail[maxl*maxu];
int val[maxl*maxu];
inttot;
char
c[maxl];
char
s[maxl];
long
long f[3
][maxl][maxl];
bool
vis[maxl];
void
update()
val[now]++;
return;}
void
makefail()
fail[tree[
from][i]]=tree[fail[from
]][i];
val[tree[
from][i]]|=val[tree[fail[from
]][i]];
q.push(tree[
from
][i]);}}
return;}
inline
void add(long
long &a,int
b)int
main()
long
long ans=0
; makefail();
for(int i=0;ii)
for(int j=0;j<=tot;++j)
int nxt=tree[j][now];
if(val[nxt]==0) add(f[0][i+1][nxt],f[0
][i][j]);
}if(f[1
][i][j])
}if(j==0
)
int nxt=tree[j][now];
if(val[nxt]==0) add(f[0][i+1][nxt],1
); }
else}}
}for(int i=0;i<=tot;++i)
ans=(ans+mod)%mod;
printf(
"%lld\n
",ans);
}
BZOJ1030 AC自動機上的DP
description jsoi交給隊員zyx乙個任務,編制乙個稱之為 文字生成器 的電腦軟體 該軟體的使用者是一些低幼人群,他們現在使用的是gw文字生成器v6版。該軟體可以隨機生成一些文章 總是生成一篇長度固定且完全隨機的文章 也就是說,生成的文章中每個位元組都是完全隨機的。如果一篇文章中至少包含...
BZOJ3530 數數(AC自動機,動態規劃)
bzoj 很套路的ac 自動機 dp 首先,如果長度小於n 就不存在任何限制 直接大力dp 然後強制限制不能走到帶有標記的點上面 如果長度恰好為 n 的長度 那麼,要考慮是否恰好卡在範圍裡面 於是d p狀態多記一維 表示是否卡在範圍裡面 最後求一下和就行啦 include include inclu...
BZOJ3530 數數(AC自動機,動態規劃)
bzoj 很套路的 ac 自動機 dp 首先,如果長度小於 n 就不存在任何限制 直接大力 dp 然後強制限制不能走到帶有標記的點上面 如果長度恰好為 n 的長度 那麼,要考慮是否恰好卡在範圍裡面 於是 dp 狀態多記一維 表示是否卡在範圍裡面 最後求一下和就行啦 include include i...