給出n個單詞,要求求出至少含乙個單詞的長度為n的字串數量
顯然直接求出是很難求的,那麼我們就求出總的字串數量,再求出不含任何乙個單詞的字串數量
然後相減就是答案
很像gt考試,不過變成了多個串,那麼就用ac自動機
設f[i][j]為長度為i時到達字典樹上第j個點的不含任何乙個單詞的字串數量
只要保證該狀態合理就可以繼承了
#include#include#include
#include
#include
using
namespace
std;
int mod=10007
;struct
trie
t[11000];int
tot,root;
void clean(int
x)char st[110
];void
bt()
t[x].s=1;}
int list[11000
];void
bfs()
list[++tail]=son;
}head++;
}}int f[110][11000
];int
main()
bfs();
memset(f,
0,sizeof
(f));
int sum=1
;
for(int i=1;i<=m;i++) sum=(sum*26)%mod;
f[0][0]=1
;
for(int u=1;u<=m;u++)}}
}int ans=0
;
for(int i=0;i<=tot;i++) if(t[i].s==0) ans=(ans+f[m][i])%mod;
printf(
"%d\n
",((sum-ans)%mod+mod)%mod);
return0;
}
BZOJ1030 JSOI2007文字生成器
比起前面hnoi的gt考試,貌似這題是多模式串。然後我滾去學ac自動機了。發現還是很好寫的。ac自動機部分見筆記 搞出自動機之後,f i j 表示自動機上第i個節點匹配到第j個字元不可讀文字的數量,然後自己yy一下轉移 include include include define n 10005 d...
bzoj1030 JSOI2007 文字生成器
傳送門 思路 直接算好像比較困難,所以考慮先算不可讀的串的個數,再拿總串數去減。不可讀的串的數量就是在ac自動機上走m步而不經過結尾節點 包括結尾點和fail指向結尾點的節點 的路徑條數。這個怎麼求呢?設f i j 表示走i步,現在在j號節點的路徑條數。那麼f i j 可以轉移f i 1 son j...
bzoj1030 JSOI2007 文字生成器
time limit 1 sec memory limit 162 mb submit 2891 solved 1193 submit status discuss jsoi交給隊員zyx乙個任務,編制乙個稱之為 文字生成器 的電腦軟體 該軟體的使用者是一些低幼人群,他們現在使用的是gw文字生成器v...