BZOJ 1030 文本生成器 | 在AC自动机上跑DP
题目:
http://www.lydsy.com/JudgeOnline/problem.php?id=1030
题解:
鸽
#include<cstdio>
#include<algorithm>
#include<cstring>
#define p 10007
#define N 6010
using namespace std;
int n,m,sze=,ans1,ans2=,a[N][],fail[N],q[N],f[][N];
char s[];
bool is[N];
void insert()
{
int now=,ch,l=strlen(s);
for(int i=;i<l;i++)
{
ch=s[i]-'A'+;
if(a[now][ch]) now=a[now][ch];
else now=a[now][ch]=++sze;
}
is[now]=;
return ;
}
void acmatch()
{
int l=,r=,now;
q[]=;fail[]=;
while(l<r)
{
now=q[l++];
for(int i=;i<=;i++)
{
if(!a[now][i]) continue;
int k=fail[now];
while(!a[k][i]) k=fail[k];
fail[a[now][i]]=a[k][i];
if (is[a[k][i]])
is[a[now][i]]=;
q[r++]=a[now][i];
}
}
}
void dp(int x)
{
for (int i=;i<=sze;i++)
{
if (is[i] || !f[x-][i]) continue;
for (int j=;j<=;j++)
{
int k=i;
while (!a[k][j]) k=fail[k];
f[x][a[k][j]]=(f[x][a[k][j]]+f[x-][i])%p;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=;i++) a[][i]=;
for (int i=;i<=n;i++)
{
scanf("%s",s);
insert();
}
acmatch();
f[][]=;
for (int i=;i<=m;i++) dp(i);
for (int i=;i<=m;i++)
ans2=ans2*%p;
for(int i=;i<=sze;i++)
if(!is[i]) ans1=(ans1+f[m][i])%p;
printf("%d",(ans2-ans1+p)%p);
return ;
}
BZOJ 1030 文本生成器 | 在AC自动机上跑DP的更多相关文章
- 【BZOJ1030】[JSOI2007] 文本生成器(AC自动机上跑DP)
点此看题面 大致题意: 给你\(N\)个字符串(只含大写字母),要你求出有多少个由\(M\)个大写字母构成的字符串含有这\(N\)个字符串中的至少一个. \(AC\)自动机 看到题目,应该比较容易想到 ...
- [bzoj] 1030 文本生成器 || AC自动机+dp
原题 给出n个字符串,求随机生成一个m长度的字符串,有多少个是可辨识的(即出现了n个字符串中的任意字符串) 正难则反 求有多少个不可辨识的,26^m-不可辨识即为答案 f[i][j]表示填到第i个字符 ...
- BZOJ1030 JSOI2007 文本生成器 【AC自动机】【DP】*
BZOJ1030 JSOI2007 文本生成器 Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群,他们现 ...
- BZOJ 1030 文本生成器
很老的题目了,很早以前学AC自动机的时候就A过一次 今天算是复习啦 我们可以把问题转化成一个给定字符串都没出现的字符串有多少个 我们建立AC自动机,设dp[i][j]表示走了i步当前在j节点上 在DP ...
- [Bzoj1030][JSOI2007]文本生成器(AC自动机)(dp)
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5254 Solved: 2172[Submit][Stat ...
- HNU 13108-Just Another Knapsack Problem (ac自动机上的dp)
题意: 给你一个母串,多个模式串及其价值,求用模式串拼接成母串(不重叠不遗漏),能获得的最大价值. 分析: ac自动机中,在字典树上查找时,用dp,dp[i]拼成母串以i为结尾的子串,获得的最大价值, ...
- POJ 3691 AC自动机上的dp
题目大意: 给定一些不合理的DNA序列,再给一段较长的dna序列,问最少修改几次可以使序列中不存在任何不合理序列,不能找到修改方法输出-1 这里你修改某一个点的DNA可能会影响后面,我们不能单纯的找匹 ...
- bzoj1030: [JSOI2007]文本生成器(AC自动机+DP)
第一次写这类题...懵 直接计算答案不好计算,所以补集转化求不合法的方案. 首先考虑朴素的DP,设$f(i, s)$表示前$i$个字符,字符串为$s$的方案数,且任意一个给定串都不存在$s$中. 我们 ...
- [JSOI2007]文本生成器(AC自动机+DP)
题意 给你n个串.问有多少长度为m的串使得这n个串至少在其中出现过一次.输出答案膜10007意义下的结果. (n<=100,每个串的长度<=100) 题解 在AC自动机上跑DP. 用到一个 ...
随机推荐
- QQ群排名优化到霸屏的策略怎么做?
谈起QQ群排名霸屏,首先要弄清楚概念,有些刚接触QQ群的朋友可能不太了解,所谓的QQ群排名霸屏,就是指当你的客户群体搜索QQ群某个关键词时,出现在QQ群搜索结果前面的群,全部或者大部分都是我们自己的群 ...
- 电子商城实录------定义init初始化的方法
路由方法的设置 //路由方法 private static function dispatch(){ //获取控制器名称(类比:英文单词的后缀) $controller_name=CONTROLLER ...
- MongoDB从环境搭建到代码编程(Window 环境)
本人开发环境: window Server 2008 , 64位系统 服务端 MongoDB下载地址:http://www.mongodb.org/downloads (本人己下好的在百度网盘 : ...
- webpack入门概念
一 概念 1 入口(entry) 入口起点(entry point)提示webpack 应该使用那个模块,来作为构建其内部依赖图得开始.进入入口七点后,webpack 会找出那些模块和库是入口起点(直 ...
- RevealTrans图片切换效果
RevealTrans 更新时间:2013-06-01 17:11:59 | RevealTrans兼容性:IE5.5+ 语法: filter : progid:DXImageTransform.Mi ...
- java网络编程框架
虽然写过一些网络编程方面的东西,但还没有深入研究过这方面的内容,直接摘录一些文章,后续整理 原文地址:http://blog.csdn.net/lwuit/article/details/730613 ...
- 「暑期训练」「Brute Force」 Restoring Painting (CFR353D2B)
题意 给定一定条件,问符合的矩阵有几种. 分析 见了鬼了,这破题谁加的brute force的标签,素质极差.因为范围是1e5,那你平方(枚举算法)的复杂度必然爆. 然后你就会思考其中奥妙无穷的数学规 ...
- 第二篇 Fiddler配置_浏览器&手机
什么是Fiddler? 网络项目的开发和测试中,Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的 ,可以说是非常常用的手头工具了,本文就Fiddler使用和配置进行说明. ...
- 解决灰色shader与mask冲突的方案
Shader "Custom/Opaque" { Properties { [PerRendererData] _MainTex ("Sprite Texture&quo ...
- 剑指offer-变态跳台阶09
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution: def jumpFloorII(self, n ...