BZOJ5337 [TJOI2018] 碱基序列 【哈希】【动态规划】
题目分析:
这道题的难点在于要取模,而题面没有写。
容易想到一个O(1E7)的dp。KMP或者哈希得到相关位置然后对于相关位置判断上一个位置有多少种情况。
代码:
#include<bits/stdc++.h>
using namespace std; const int maxn = ; const int mod = ; int n;
string str;
string fm[][];
int num[]; const int Kh = ; struct hnum{
int base;
unsigned long long multi[];
unsigned long long hash[];
}h[]; void read(){
ios::sync_with_stdio(false);
cin.tie();
cin >> n;
cin >> str;
for(int i=;i<=n;i++){
cin >> num[i];
for(int j=;j<=num[i];j++) {cin >> fm[i][j];}
}
} long long rm[][maxn];
int d[maxn]; void KMP(int c,int m){
memset(d,,sizeof(d));
string &p = fm[c][m];
for(int o = ;o<Kh;o++){
unsigned long long now = ;
for(int i=;i<p.length();i++)
now += (p[i]-'A'+)*h[o].multi[i];
for(int i=p.length()-;i<str.length();i++){
unsigned long long data;
if(i!=p.length()-)data = h[o].hash[i]-h[o].hash[i-p.length()];
else data = h[o].hash[i];
if(now == data) d[i]++;
now = now*h[o].base;
}
}
for(int i=;i<str.length();i++) if(d[i]==Kh)d[i]=;else d[i]=;
} void build_hash(){
for(int i=;i<Kh;i++){
h[i].multi[] = ;
for(int j=;j<str.length();j++){
h[i].multi[j] = h[i].multi[j-]*h[i].base;
}
h[i].hash[] = str[]-'A'+;
for(int j=;j<str.length();j++){
h[i].hash[j] = h[i].hash[j-]+(str[j]-'A'+)*h[i].multi[j];
}
}
} void work(){
h[].base = ,h[].base = ;
build_hash();
for(int i=;i<=num[];i++){
KMP(,i); for(int k=;k<str.length();k++) rm[][k] += d[k];
}
for(int i=;i<=n;i++){
memset(rm[i&],,sizeof(rm[i&]));
for(int j=;j<=num[i];j++){
KMP(i,j); int len = fm[i][j].length();
for(int k=;k<str.length();k++){
if(d[k]){
if(k-len<) continue;
rm[i&][k] += rm[(i+)&][k-len];
rm[i&][k] %= mod;
}
}
}
}
long long ans = ;
for(int j=;j<str.length();j++){
ans += rm[n&][j]; ans %= mod;
}
printf("%lld",ans);
} int main(){
read();
work();
return ;
}
BZOJ5337 [TJOI2018] 碱基序列 【哈希】【动态规划】的更多相关文章
- UOJ#373. 【ZJOI2018】线图 搜索,树哈希,动态规划
原文链接www.cnblogs.com/zhouzhendong/p/UOJ373.html 前言 真是一道毒瘤题.UOJ卡常毒瘤++.我卡了1.5h的常数才过QAQ Orzjry 标算居然是指数做法 ...
- 洛谷P4591 [TJOI2018]碱基序列(hash dp)
题意 题目链接 Sol \(f[i][j]\)表示匹配到第\(i\)个串,当前在主串的第\(j\)个位置 转移的时候判断一下是否可行就行了.随便一个能搞字符串匹配的算法都能过 复杂度\(O(|S| K ...
- [TJOI2018]碱基序列
嘟嘟嘟 现在看到字符串就想到SAM,所以很担心kmp啥的会不会忘了-- 这题感觉挺暴力的:首先当然要把\(s\)建成SAM,然后令\(dp[i][j]\)表示到第\(i\)组时,SAM上节点\(j\) ...
- BZOJ5337 [TJOI2018]str
题意 小豆参加了生物实验室.在实验室里,他主要研究蛋臼质.他现在研究的蛋臼质是由k个氨基酸按一定顺序构成的.每一个氨基酸都可能有a种碱基序 列si_j 构成.现在小豆有一个碱基串s,小豆想知道在这个碱 ...
- 洛谷P4591 [TJOI2018]碱基序列 【KMP + dp】
题目链接 洛谷P4591 题解 设\(f[i][j]\)表示前\(i\)个串匹配到位置\(j\)的方案数,匹配一下第\(i\)个串进行转移即可 本来写了\(hash\),发现没过,又写了一个\(KMP ...
- 【[TJOI2018]碱基序列】
题目 为什么没人用\(SAM\)啊 我们先把原来的模式串建一遍\(SAM\),之后我们就可以求出\(SAM\)上每一个节点的\(|endpos|\)就可以知道每一个子串出现的次数了,也就是在模式串上的 ...
- 「学习笔记」字符串基础:Hash,KMP与Trie
「学习笔记」字符串基础:Hash,KMP与Trie 点击查看目录 目录 「学习笔记」字符串基础:Hash,KMP与Trie Hash 算法 代码 KMP 算法 前置知识:\(\text{Border} ...
- 【BZOJ5337】[TJOI2018]str(动态规划,哈希)
[BZOJ5337][TJOI2018]str(动态规划,哈希) 题面 BZOJ 洛谷 题解 就很呆... 显然按层\(dp\),如果能够匹配上就进行转移,直接哈希判断是否能够匹配就好了... #in ...
- 【BZOJ5336】[TJOI2018]party(动态规划)
[BZOJ5336][TJOI2018]party(动态规划) 题面 BZOJ 洛谷 题解 这题好神仙啊... 考虑普通的\(LCS\)的\(dp\),\(f[i][j]=\max\{f[i-1][j ...
随机推荐
- nginx-haproxy-lvs功能和性能对比 nginx - max-fail + 调度算法
优点(性能和功能两方面分析) 缺点 lvs 工作在4层,可以对http,MySQL等服务负载均衡.负责流量的分发,对io,cpu,mem的消耗少 功能比较少,没有正则匹配的功能 nginx 工作在7层 ...
- blob 对象 实现分片上传 及 显示进度条
blob对象介绍 一个 Blob对象表示一个不可变的, 原始数据的类似文件对象.Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是js中的一个对象,里面可以储存大量的二进 ...
- NPOI导Excel样式设置
一.创建一个Excel //创建一个工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); //创建一个页 ISheet sheet = workbook.Cr ...
- HDU 1109 Run Away
题目大意:给一个矩阵的长宽,再给n个点,求矩阵区域内某个点到各个点的最小距离的最大值,输出所求点的坐标 这道题我还是写了随机化乱搞,不过由于比较懒于是就没有写模拟退火,不过也是可以AC的 我们先初始随 ...
- $\mathfrak {reputation}$
\(\mathfrak {reputation}\) 举世盛名 身败名裂
- 【php增删改查实例】第十四节 - 用户管理模块(起步)
从这一节开始,开始着手开发部门管理模块. 之后的内容就在此基础上进行增加. 1.用户查询 在目录中建立一个user文件夹,作为我们用户管理的模块. 打开这个文件,新建一个userManage.html ...
- windows服务中对外提供API接口
public class SendMqService { private static bool isExcute = true; private static HttpListener listen ...
- vue 过滤器基本使用
Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化,例如时间戳格式化. 过滤器可以用在: 双花括号插值 v-bind 表达式 (2.1.0+ 开始支持). 过滤器应该被添加在 JavaSc ...
- ASP.NET Core使用TopShelf部署Windows服务
asp.net core很大的方便了跨平台的开发者,linux的开发者可以使用apache和nginx来做反向代理,windows上可以用IIS进行反向代理. 反向代理可以提供很多特性,固然很好.但是 ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(七)一次线上Mysql数据库崩溃事故的记录
作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 文章简介 工作这几年,技术栈在不断更新,项目管理心得也增加了不少,写 ...