BZOJ2366 : 多重历史
建立AC自动机,因为不存在某个串是另一个串的后缀,因此匹配到任意位置都只可能匹配一个串。
预处理出每个串出现的所有位置,总的出现次数为$O(m)$。
设$f[i][j]$表示考虑了前$i$个串,最后一个串匹配位置是$j$的方案数,DP即可。
转移则是枚举$f[i-1][k]$,$j$和$k$显然可以双指针维护。
时间复杂度$O(n+m)$。
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int N=10010,M=500010,P=1000000;
int n,i,j,k,x,t,f[2][M],ans,len[N],tot,son[N][26],id[N],fail[N],q[N];char s[M];vector<int>v[N];
inline void up(int&x,int y){x+=y;if(x>=P)x-=P;}
void ins(int p){
scanf("%s",s);
for(int l=len[p]=strlen(s),x=0,i=0,w;i<l;i++){
if(!son[x][w=s[i]-'a'])son[x][w]=++tot;x=son[x][w];
if(i==l-1)id[x]=p;
}
}
void make(){
int h=1,t=0,i,j,x;fail[0]=-1;
for(i=0;i<26;i++)if(son[0][i])q[++t]=son[0][i];
while(h<=t)for(x=q[h++],i=0;i<26;i++)if(son[x][i]){
fail[q[++t]=son[x][i]]=son[fail[x]][i];
id[son[x][i]]+=id[son[fail[x]][i]];
}else son[x][i]=son[fail[x]][i];
}
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++)ins(i);
make();
scanf("%s",s);
for(i=0;s[i];i++)if(id[x=son[x][s[i]-'a']])v[id[x]].push_back(i);
for(i=0,x=1;i<v[1].size();i++)f[1][i]=1;
for(i=2;i<=n;i++)for(x^=1,j=k=t=0;j<v[i].size();j++){
while(k<v[i-1].size()&&v[i-1][k]+len[i]<=v[i][j])up(t,f[x^1][k++]);
f[x][j]=t;
}
for(i=0;i<v[n].size();i++)up(ans,f[x][i]);
return printf("%d",ans),0;
}
BZOJ2366 : 多重历史的更多相关文章
- dp式子100个……
1. 资源问题1-----机器分配问题F[I,j]:=max(f[i-1,k]+w[i,j-k]) 2. 资源问题2------01背包问题F[I,j]:=max(f[i- ...
- dp方程
1. 资源问题1 -----机器分配问题 F[I,j]:=max(f[i-1,k]+w[i,j-k]) 2. 资源问题2 ------01背包问题 F[I,j]:=ma ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述
微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...
- [计算机、网络相关历史]unix简史
本文2001年由台湾“网络农夫”所写,其人生平不祥,此文受鸟哥大力推崇,两人应该相识.文章写得很不错,应该是查了很多资料整理而成的,美中不足的是好多语句不通顺,国考语文绝对不及格,哈哈. 0.我的准备 ...
- OpenGL------版本历史
到今天为止,正式的OpenGL已经有九个版本.(1.0, 1.1, 1.2, 1.2.1, 1.3, 1.4, 1.5, 2.0, 2.1)每个OpenGL版本的推出,都增加了一些当时流行的或者迫切需 ...
- 多重bash登入的history写入问题
问题:如果一个用户同时开好几个 bash 接口, 这时~/.bash_history中会写入哪个bash的历史命令记录? 答:所有的bash 都有自己的 HISTSIZE 笔记录在内存中,因为等到注销 ...
- 再谈HTTP2性能提升之背后原理—HTTP2历史解剖
即使千辛万苦,还是把网站升级到http2了,遇坑如<phpcms v9站http升级到https加http2遇到到坑>. 因为理论相比于 HTTP 1.x ,在同时兼容 HTTP/1.1 ...
- 【历史】- UNIX发展史(BSD,GNU,linux)
先前的一個理想 UNIX 系统自 1969 年 Ken Thompson 与 Dennis Ritchie 在美国贝尔电话实验室(Bell Telephone Laboratories)发展出雏形至今 ...
随机推荐
- 电信运营商 IT 系统介绍
业务支撑系统 BSS: Business support system 运营支撑系统 OSS: Operation support system 管理支撑系统 MSS: Management Su ...
- 在 Win 7或8 下使用 VirtualBOX 虚拟机安装 OS X 10.11 El Capitan 及 Xcode 7.0
注:本文源自于: http://bbs.feng.com/read-htm-tid-9908410.html _____________________________________________ ...
- 【linux】crontab失效
在linux上,crontab任务全部使用完整路径,但是任务无效. 检测crontab 服务是否启动, /etc/init.d/cron status /etc/init.d/cron restart
- 性能测试三十五:jvm垃圾回收-GC
垃圾回收-GC 三个问题 哪些内存需要回收? 什么时候回收? 如何回收? YoungGC和FullGC: 新生代引发的GC叫YoungGC 老年代引发的GC叫FullGC FullGC会引起整个Jvm ...
- 性能测试二十:环境部署之Tomcat多实例部署+日志监控
一个tomcat性能有限,所以需要部署等多个tomcat 单实例部署与windows下类似,项目包放到webapp目录下,启动bin目录下的startup.sh即可启动命令:./startup.sh启 ...
- python 全栈开发,Day10(动态参数,命名空间,作用域,函数嵌套)
一.动态参数 def func(a,b,c,d,e,f,g): pass func(1,2,3,4,5,6,7) 如果加30个参数呢?有没有万能的参数,可以代表一切参数呢? *args 动态参数,万能 ...
- Linux下搭建ruby on rails环境
要搭建的东西:Ruby 1.8.7,Rails 2.3.8,rubygem 1.3.7 1.安装ruby sudo apt-get install ruby-full 2.安装rubygem sudo ...
- C++传值、传引用
C++传值.传引用 C++的函数参数传递方式,可以是传值方式,也可以是传引用方式.传值的本质是:形参是实参的一份复制.传引用的本质是:形参和实参是同一个东西. 传值和传引用,对大多数常见类型都是适用的 ...
- poj 1321 棋盘问题(n行中放任意k行)
n*n的棋盘摆K的棋子,任意两个棋子不能在同一行同一列 Sample Input 2 1#. //# 可放.#4 4...#..#..#..#...-1 -1Sample Output 21 # i ...
- Oracle回收站的清理方法
http://blog.itpub.net/18841027/viewspace-1057765/