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 : 多重历史相关推荐
- 盛(Shèng)姓源出考
今天无事,就自己用了三十多年而尚不知来龙去脉的姓氏考证了一番,原来自己也算是荣光的黄帝姬姓的后裔,暗喜焉一番 相关资料如下: ===================================== ...
- 天问:科学有边界吗?----《三体》与量子物理史话
<三体>故事与"科学边界" 一.量子物理学的前世今生 量子物理学的不连续概念,从1900年普朗克提出假设至今,已经100多年了: 记得小学高年级的时候就看过一本科幻书, ...
- 果壳中的宇宙 1:把时空掰弯的男人
即使把我关在果壳之中,仍然自以为无限空间之王. 周末闲来无事,又把霍金<果壳中的宇宙>读了两遍,是的,你没看错,读了两遍.好书,蹂躏两遍都不够.读书和看电影差不多,宁愿重复看好的电影,也 ...
- 温伯格:量子力学的困境
海归学者发起的公益学术平台 分享信息,整合资源 交流学术,偶尔风月 20世纪头十年间量子力学的发展给许多物理学家带来冲击.时至今日,尽管量子力学已经取得巨大成功,关于它的意义与未来的争论却仍在继续. ...
- 初探测量导致波函数的坍缩不是意识的参与而是信息的作用
初探测量导致波函数的坍缩不是意识的参与而是信息的作用 nam3002@163.com 摘要:波函数的理解,波函数怎么坍缩的,任何事情都可以叠加吗?测量导致波函数坍缩与信息的作用,测量引起波函数坍缩与意 ...
- 物理学家:时间旅行有可能实现,但前提是……
来源:机器之心 作者:Barak Shoshany 原文链接: https://phys.org/news/2022-04-parallel-timelines.html 时间旅行是科幻电影.小说中经 ...
- 传感器融合带来多重好处
传感器融合带来多重好处 Sensor fusion brings multiple benefits ADAS(特别是与汽车传感器的发展趋势相吻合的汽车自动驾驶系统).这个概念本身并不新鲜:在Goog ...
- Linux容器的发展历史及其未来趋势
Linux容器是操作系统级虚拟化,在单个Linux主机上提供多个独立Linux环境的技术.与虚拟机(VM)不同,容器不运行专用客户操作系统.相反,他们共享主机操作系统内核,并利用客户操作系统库提供所需 ...
- Science:细菌和古菌多重抗性系统抵御噬菌体和外来质粒
作者:李婷婷,南京农业大学硕士在读,主要研究根际噬菌体疗法 本期为您介绍细菌和古菌针对噬菌体和质粒进化出的除已知抗性系统之外的多重抗性系统.原文于2018年发表于Science. 摘要 细菌和古菌极易 ...
最新文章
- python解压zip文件_python-29 python解压压缩包的几种方法
- HTML知识点总结之ul,ol,li标签
- RabbitMq常见问题
- php://input allow_url_include,php allow_url_include的应用和解释_PHP教程
- oracle 的使用
- * poj 3159 Candies 最短路 dijkstra堆优化
- php post请求后端拿不到值_PHP解决Vue发起POST请求,接收不到数据
- vue接收jsp发送的post请求_vue与后台交互之post用法
- 右键添加新建剪切板文件夹 新建今天日期文件夹
- 浙江万里学院计算机专业宿舍,2020年浙江万里学院宿舍条件环境照片 宿舍空调相关配置介绍...
- MySQL游标(cursor) 定义及使用
- 获取linux系统信息的一个python脚本
- lenovo L480 进入bios_如何通过bios关闭pxe启动 - 操作系统
- java递归求和_java递归算法求和有哪些方式实现?
- 妙用Vista光盘轻松制作Windows PE 2.0启动光盘/闪存
- 2021-02-16
- CorelDRAW_X6使用汇总
- 阿里网盘攻,百度网盘守
- C语言PAT刷题 - 1020 月饼
- 大话西游手游服务器维护要多久,大话西游手游2017年1月5日维护公告
热门文章
- java jdbc jar包_大数据从入门到深入:JavaEE 之 数据库技术 JDBC(1)
- php mvc 路由,PHP MVC框架路由学习笔记
- java打包成jar_把Java程序打包成jar文件包并执行的方法
- mybatis plus 插入生成id_Mybatis-Plus 3.3.0 发布,让你专注业务快速敏捷开发
- java pattern详解_JAVA正则表达式:Pattern类与Matcher类详解
- Redux Toolkit 使用指南
- php mian函数,电脑main什么意思
- python 获取本地视频信息_python获取视频文件信息
- Android设置Spinner控件的文字居中显示
- 计算机二级 java和web_2016计算机二级web程序设计判断题及答案