bzoj 1030
来源:互联网 发布:清洁pcb的玻璃笔淘宝 编辑:程序博客网 时间:2024/06/18 17:11
AC自动机模板
#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <ctime>#include <string>#include <map>#include <vector>#include <stack>#include <queue>#include <utility>#include <iostream>#include <algorithm>template<class Num>void read(Num &x){ char c; int flag = 1; while((c = getchar()) < '0' || c > '9') if(c == '-') flag *= -1; x = c - '0'; while((c = getchar()) >= '0' && c <= '9') x = (x<<3) + (x<<1) + (c-'0'); x *= flag; return;}template<class Num>void write(Num x){ if(x < 0) putchar('-'), x = -x; static char s[20];int sl = 0; while(x) s[sl++] = x%10 + '0',x /= 10; if(!sl) {putchar('0');return;} while(sl) putchar(s[--sl]);}const int maxn = 105, maxl = 105, size = 26, Mod = 10007;struct TrieNode{ TrieNode *p[size], *fail; bool end; int dp[maxl];}T[maxn*maxl], *root;int n, m, tot;char c[maxl];TrieNode *NewNode(){ return T + (++tot);}void insert(char *t,TrieNode *now){ if(!(*t)) { now->end = true; return; } TrieNode *&next = now->p[(*t)-'A']; if(!next) next = NewNode(); insert(t + 1, next);}void init(){ read(n), read(m); root = NewNode(); for(int i = 1; i <= n; i++) { scanf("%s",c); insert(c, root); }}void build(){ std::queue<TrieNode*>line; root->fail = root; for(int i = 0; i < size; i++) if(root->p[i]) { root->p[i]->fail = root; line.push(root->p[i]); } else root->p[i] = root; while(!line.empty()) { TrieNode *x = line.front(); line.pop(); for(int i = 0; i < size; i++) { if(x->p[i]) { x->p[i]->fail = x->fail->p[i]; line.push(x->p[i]); } else x->p[i] = x->fail->p[i]; } if(x->fail->end) x->end = true; }}void update(int len){ for(int x = 1; x <= tot; x++) for(int i = 0; i < size; i++) if(!T[x].p[i]->end) { T[x].p[i]->dp[len] += T[x].dp[len-1]; T[x].p[i]->dp[len] %= Mod; }}long long getans(){ long long ans = 0, sum = 1; for(int i = 1; i <= tot; i++) ans += T[i].dp[m], ans %= Mod; for(int i = 1; i <= m; i++) sum *= size, sum %= Mod; ans = (sum - ans + Mod)%Mod; return ans; }int main(){#ifndef ONLINE_JUDGE freopen("1030.in","r",stdin); freopen("1030.out","w",stdout);#endif init(), build(); root->dp[0] = 1; for(int i = 1; i <= m; i++) update(i); write(getans());#ifndef ONLINE_JUDGE fclose(stdin); fclose(stdout);#endif return 0; }
0 0
- bzoj 1030
- bzoj-1030 文本生成器
- [BZOJ]1030 文本生成器
- BZOJ 1030 文本生成器
- [BZOJ ]
- BZOJ****-****
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- bzoj
- bzoj
- Redis集群主备模式部署
- 工具资源网站
- 短信验证
- 跳跃表 C#
- poj-1094 Sorting It All Out
- bzoj 1030
- VB-控件注册 - 利用资源文件将dll、ocx打包进exe文件
- HDU 5355 Cake
- MUI-ActionSheet动作菜单
- XML随笔
- Leetcode 201 Bitwise AND of Numbers Range 区间内整数按位与
- CALayer
- Ajax(二) — Ajax初步 : $.post 方法与 $.ajax 方法
- openstack官方docker介绍