比较裸的AC自动机+Dp,F[i][j][k]表示第i个节点,走了j步,有无有单词(k)的方案数题。
SPOJ的GEN,是这道的加强版。
const int N = 26, M = 110, Maxn = 7010, Mod = 10007; struct Node { Node *Child[N], *Next; int Dat, Id; bool Danger; Node(int _Dat) : Dat(_Dat) { Danger = 0, Next = NULL; Rep(i, N) Child[i] = NULL; } } *Root; int n, m; inline void Build(); inline void Input() { static char Dat[M]; static int Len; scanf("%d%d", &m, &n), getchar(); Root = new Node(0); while(m--) { scanf("%s", Dat), Len = strlen(Dat); Node *Now = Root; Rep(i, Len) { int x = Dat[i] - 'A'; if(Now->Child[x] == NULL) Now->Child[x] = new Node(x); Now = Now->Child[x]; } Now->Danger = 1; } Build(); } int Dp[Maxn][M][2]; inline Node* Find(Node *Now, int C); inline int Work(Node *Now, int Len, bool Danger) { if(Now == NULL) return 0; if(!Len) return (int)Danger; int &Ret = Dp[Now->Id][Len][Danger]; if(Ret != -1) return Ret; Ret = 0; Rep(i, N) { Node *V = Find(Now, i); Ret += Work(V, Len - 1, Danger | V->Danger); } return (Ret %= Mod); } inline void Solve() { clr(Dp, 255); printf("%d\n", Work(Root, n, 0)); } int main() { Input(); Solve(); return 0; } struct State { Node *Now, *Father; State(Node *_Now, Node *_Father) : Now(_Now), Father(_Father) {} } ; inline Node* Find(Node *Now, int C) { while(Now != Root && Now->Child[C] == NULL) Now = Now->Next; return Now->Child[C] != NULL ? Now->Child[C] : Root; } inline void Build() { static queue<State> Q; while(sz(Q)) Q.pop(); int tot = 0; for(Q.push(State(Root, NULL)); sz(Q); Q.pop()) { State T = Q.front(); T.Now->Id = ++tot; if(T.Now == Root || T.Father == Root) T.Now->Next = Root; else T.Now->Next = Find(T.Father->Next, T.Now->Dat); for(Node *tab = T.Now->Next; tab != Root && !(T.Now->Danger); tab = tab->Next) T.Now->Danger |= tab->Danger; Rep(i, N) if(T.Now->Child[i] != NULL) Q.push(State(T.Now->Child[i], T.Now)); } }
相关推荐
本模板为 BZOJ3224:文艺平衡树 的源程序 含各种操作,旋转,插入,删除,求前驱,后继,查询值为x的数的排名,查询排名为k的数,求最大值,最小值……
八中OJ,又简作BZOJ,以原题巨多而著称,该数据为BZOJ上的1000-1109和1130-1139的测试数据节点,没有题目,有需要题目的可以到https://hydro.ac/d/bzoj/p网站查找对应的题目。
「BZOJ1053」反素数/「Violet5」樱花 详细题解
最大数 JSOI2010 (BZOJ1012 可提交) 4. 理想的正方形 HAOI2007 (BZOJ1047 可提交) 5. Lineup 排队 USACO2007 (BZOJ1699 可提交) 6. BZOJ2738 矩阵乘法 7. BZOJ2311 花神游历各国 8. BZOJ1878 HH 的项链 9. BZOJ3132...
#BZOJ Problem Rankrank.cpp 程序文件data.dat bzoj题库数据done.dat AC过的题,初始可以把所有A过的题粘进去,正常退出的话自动维护。black.dat 黑名单。选题时会跳过。错题、神题、没题面、不想做等等。//Thank ...
CTSC 2011 无穷图的桥(BZOJ 2307) 题解.ppt
BZOJ网站镜像,对于经常挂掉的BZOJ真是刷题必备啊!
BZOJ平台全部代码,解压到一个文件夹在打开使用。BZOJ平台全部代码,解压到一个文件夹在打开使用。
BZOJ3230相似子串的测试数据,希望能够帮到大家。
第1行: 3个用空格隔开的整数:N,P,以及K第2..P+1行: 第i+1行为3个用空格隔开的整数:A_i,B_i,L_i第1行: 输出1个整数,为FJ在这项工
bzoj部分数据.
ZOJCH是BZOJ题库的离线版
BZOJ省选十连测题面,只有题面!!!!!,请自行到BZOJ上进行提交,上传目的是提供离线的一个题目
BZOJ原题-BZOJP3001-P4000的题目,下载后可以离线做题。
BZOJ原题-BZOJP2001-P3000的题目,下载后可以离线做题。
BZOJ原题-BZOJP4001-P4406的题目,下载后可以离线做题。
BZOJ原题-BZOJP1000-P2000的题目,下载后可以离线做题。
bzoj1878数据(莫队)详细题解:http://blog.csdn.net/boyxiejunboy/article/details/50611972
题解 , 文档 , 资料 BZOJ 泡泡堂
CreationAugust 的BZOJ代码合集 【Written by CreationAugust】