bzoj 1030
dp[i][j] 表示,在AC自动机中,从根节点开始,走了i条边,并且经过的点不包含危险节点,走到了j节点的路径数。
收获:
1、正难则反
2、一个字符串不包含给定pattern中的任何一个,则该字符串在AC自动机上走时不会走到“危险节点”。
3、DFS可以做的事情,可以考虑DP来做。
- #include <cstdio>
- #include <cstring>
- #include <vector>
- #include <queue>
- #define fprintf(...)
- #define M 10007
- #define maxn 6010
- using namespace std;
- int n, len;
- int son[maxn][], fail[maxn], ikey[maxn], ntot;
- int dp[][maxn];
- void insert( const char *P ) {
- int n=strlen(P);
- int u=;
- for( int i=; i<n; i++ ) {
- int c=P[i]-'A';
- if( !son[u][c] ) son[u][c]=++ntot;
- fprintf( stderr, "%d->%d %c\n", u, son[u][c], c+'a' );
- u=son[u][c];
- }
- ikey[u] = true;
- }
- void build() {
- queue<int> qu;
- for( int c=; c<; c++ ) {
- int v=son[][c];
- if( !v ) continue;
- qu.push( v );
- fail[v] = ;
- fprintf( stderr, "fail[%d] = %d\n", v, fail[v] );
- }
- while( !qu.empty() ) {
- int u=qu.front();
- qu.pop();
- for( int c=; c<; c++ ) {
- int v=son[u][c];
- int w=fail[u];
- if( !v ) {
- son[u][c] = son[fail[u]][c];
- fprintf( stderr, "%d->%d %c\n", u, son[u][c], c+'a' );
- } else {
- while( w && !son[w][c] ) w=fail[w];
- fail[v] = son[w][c];
- fprintf( stderr, "fail[%d] = %d\n", v, fail[v] );
- ikey[v] |= ikey[fail[v]];
- qu.push( v );
- }
- }
- }
- }
- void work() {
- dp[][] = ;
- for( int i=; i<=len; i++ )
- for( int u=; u<=ntot; u++ )
- if( dp[i][u] ) {
- fprintf( stderr, "dp[%d][%d] = %d\n", i, u, dp[i][u] );
- for( int c=; c<; c++ ) {
- int v=son[u][c];
- if( ikey[v] ) continue;
- dp[i+][v] += dp[i][u];
- if( dp[i+][v]>=M ) dp[i+][v]-=M;
- }
- }
- int ans = ;
- for( int i=; i<=len; i++ )
- ans = (ans*)%M;
- for( int u=; u<=ntot; u++ ) {
- ans -= dp[len][u];
- if( ans< ) ans+=M;
- }
- printf( "%d\n", ans );
- }
- int main() {
- scanf( "%d%d", &n, &len );
- for( int i=; i<=n; i++ ) {
- char str[];
- scanf( "%s", str );
- insert( str );
- }
- build();
- work();
- }
bzoj 1030的更多相关文章
- BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3953 Solved: 1614[Submit][Stat ...
- bzoj 1030 [JSOI2007]文本生成器(AC自动机+DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1030 [题意] 给n个小串,随机构造一个长为m的大串,一个串合法当且仅当包含一个或多个 ...
- BZOJ 1030 [JSOI2007]文本生成器
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2624 Solved: 1087[Submit][Stat ...
- BZOJ 1030 [JSOI2007]文本生成器(AC自动机)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1030 [题目大意] 求出包含任意一个给定串的串数量 [题解] 我们求出不包含任意一个给 ...
- bzoj 1030 ac自动机
比较容易看出来先建立ac自动机,然后在自动机上做DP,设w[0..1][i][j]为当前不包括/包括字典中的字符串,当前在自动机中走到第i个节点,完成的文本的长度为j的方案数,那么比较容易的转移w[i ...
- BZOJ 1030 文本生成器 | 在AC自动机上跑DP
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=1030 题解: 鸽 #include<cstdio> #include<al ...
- bzoj 1030: [JSOI2007]文本生成器 (ac自己主动机上的dp)
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2635 Solved: 1090 [id=1030&qu ...
- 【BZOJ 1030】[JSOI2007]文本生成器
[题目链接]:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1030 [题意] [题解] /* 先把AC自动机搞出来; 然后利用AC自动机,把 ...
- BZOJ 1030 【JSOI2007】 文本生成器
Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生 ...
- 【BZOJ 1030】【JSOI 2007】文本生成器 AC自动机+递推
一直不理解到底怎么做啊,想了好久$TwT$ 最后终于明白了为什么找到第一个满足条件的$fail$就计算,因为避免重复,这个回答,,, 然后$root$下面要接上26个节点,这里26个字母中不在字典内的 ...
随机推荐
- 一款基于react-native的弹窗提示组件
介绍一款基于react-native的弹窗提示插件 react-native-ms , github地址:https://github.com/jiangzhenfei/react-native-ms ...
- window10_使用技巧
1.系统关机文件 @echo offshutdown -s -t 0 2.终端常用命令 notepad 3.解决浏览器跨域 --disable-web-security --user-data-dir ...
- 树的直径(两个bfs)
题目链接:https://cn.vjudge.net/problem/POJ-2631 树的直径:树中的最长链 具体思路:随便找一个点bfs,然后找到最长的链,然后再以找到的点作为起点进行bfs,然后 ...
- keypress 、keydown、keyup后触发回车
1.keypress .keydown.keyup的区别 keypress表示键盘按下的全过程,只有按下任意字母数字键(后退.删除等系统功能键无效)时才触发,捕获到的keyCode区分大小写 keyd ...
- Cookie、Session 和 自定义分页
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- 利用__attribute__((section()))构建初始化函数表【转】
转自: https://mp.weixin.qq.com/s?__biz=MzAwMDUwNDgxOA==&mid=2652663356&idx=1&sn=7797629530 ...
- 在64位ubuntu中安装代码比较工具beyond compare
1,//从http://www.scootersoftware.com/download.php 官方地址下载 bcompare-3.3.2.14050.tar.gz 或 bcompare-4.0.7 ...
- Deep Learning基础--随时间反向传播 (BackPropagation Through Time,BPTT)推导
1. 随时间反向传播BPTT(BackPropagation Through Time, BPTT) RNN(循环神经网络)是一种具有长时记忆能力的神经网络模型,被广泛用于序列标注问题.一个典型的RN ...
- caffe Python API 之中值转换
# 编写一个函数,将二进制的均值转换为python的均值 def convert_mean(binMean,npyMean): blob = caffe.proto.caffe_pb2.BlobPro ...
- Hadoop(一):概述
一.Hadoop是什么? Hadoop是一个由Apache基金会所开发的分布式系统基础架构.Hadoop框架最核心的设计包含两个方面,一是分布式文件系统(Hadoop Distributed File ...