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 ...
随机推荐
- RBAC 基于权限的访问控制 serviceaccount -- clusterRole clusterRoleBinding
1.Role , RoleBinding 的作用对象都是namespace. 2.通过RoleRef,可以看到,RoleBinding对象通过名字,直接引用前面定义的Role,实现subject(us ...
- 开发工具|给你的项目买份保险:Python虚拟环境
读完需要 9 分钟 1. 什么是虚拟环境? 虚拟环境的意义,就如同 虚拟机 一样,它可以实现不同环境中Python依赖包相互独立,互不干扰.这在一定程度的意义上,给了我们的项目一份很有力的保障.在这里 ...
- c语言程序设计 第一例子
#include <studio.h> int main(){ printf("this is dog.\n"); return 0; } studio.h 表示st ...
- 使用odoo官方dockerfile 创建最新版镜像
以odoo11.0为例 1.检出odoo/docker仓:git clone https://github.com/odoo/docker.git 2.打开目录 http://nightly.odoo ...
- scikit-learn的线性回归模型
来自 http://blog.csdn.net/jasonding1354/article/details/46340729 内容概要 如何使用pandas读入数据 如何使用seaborn进行数据的可 ...
- 微服务监控zipkin+asp.net core
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 监控目录:微服务监控zipkin.skywalking以及日志ELK监控系列 一.zipkin介绍 zipkin是一种分布式跟踪系 ...
- Nginx---应用场景小结
Nginx介绍 Nginx一是一款轻量级的.高性能的HTTP.反向代理服务器,具有很高的稳定性.支持热部署.模块扩展也非常容易.Nginx采取了分阶段资源分配技术,处理静态文件和无缓存的反向代理加 ...
- @Pointcut的用法
在Spring 2.0中,Pointcut的定义包括两个部分:Pointcut表示式(expression)和Pointcut签名(signature).让我们先看看execution表示式的格式: ...
- Haproxy和Nginx负载均衡测试效果对比记录
为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...
- Code Review —— by12061154Joy
对结对队友刘丽萍的代码进行了复审: 优点: 1,代码逻辑正确,基本能够完全需求 2,用了不少C#自带的函数,第一次写C#,相信是查阅了不少资料,虽然还有很多地方值得优化,不过第一次能做到这样已经很不错 ...