相似基因序列问题 ——查找
【题目背景】
生物的遗传物质存在个体间或种群水平的差异,这样的差异被称为遗传变异。突变及基因重组等因素都会导致遗传变异。尽管亲代在将其遗传信息传递给子代时会发生遗传变异,但是这些遗传变异仅占遗传物质的一小部分,通常亲代和子代之间的遗传物质非常相似。遗传变异会在生物繁殖的过程中不断累积。通过比较不同生物的基因特征及基因组结构,可以大致确定生物之间的亲缘关系,并建立系统进化树。在比较过程中,可能有一些遗传物质的子序列完全相同或相似,我们称这种序列为保守序列。
假设现在已经测定了若干以 DNA 为遗传物质的生物的 DNA 碱基序列,希望通过比较这些基序列推测生物之间的亲缘关系。为了简化比较,先将碱基序列划分为若干个保守序列片段。考虑到 DNA 序列可能发生缺失、插入等影响片段数量的遗传变异,将划分得到的片段对齐至 M 个片段,并使用小写字母来表示对齐后的每一个片段。
【题目描述】
已知一棵包含了 N 个生物的系统进化树,这些生物的 DNA 序列对应的对齐至 M 个片段的序列可以用仅含小写字母的字符串表示为 1,…,s1,…,sN 。在这棵系统进化树上,如果两个生物对应的序列最多只有 K 处对应位置上的片段不相同(即对应字母不同),就称这两个生物的亲缘关系相近。
现有 Q 个尚未确定亲缘关系的生物,对齐得到序列分别为 1,…,t1,…,tQ 。为了确定这些生物在系统进化树上的位置,请对 Q 个生物分别求出,原树中有多少个生物与其亲缘关系相近。
Input
输入的第一行包含四个正整数 N,Q,M,K,分别表示系统进化树上的生物数量、待确定亲缘关系的生物数量、对齐后的序列长度和比较序列时容许的最大差异数。保证 1≤N,Q≤300,1≤M≤60,000,1≤K≤10。
接下来 N 行,每行输入一个长度恰好为 M,仅包含小写字母的字符串 si ,表示系统进化树上的每个生物对应的模板序列。
接下来 Q 行,每行输入一个长度恰好为 M,仅包含小写字母的字符串 tj ,表示待确定亲缘关系的每个生物对应的查询序列。
保证输入的两个字符串均仅包含小写字母。
Output
输出共 Q 行,其中第 j 行输出一个非负整数,表示在系统进化树上与第 j 个待确定的生物亲缘关系相近的生物数量。
样例输入1
6 4 4 1
kaki
kika
manu
nana
tepu
tero
kaka
mana
teri
anan
样例输出1
2
2
1
0
样例输入2
8 6 7 3
delphis
aduncus
peronii
plumbea
clymene
hectori
griseus
electra
delphis
helpiii
perphii
clumeee
eleelea
ddlpcus
样例输出2
1
1
2
2
1
2
解析:
因为k很小,所以我们可以直接暴力枚举匹配串,然后用字符串哈希加二分暴力往前跳到不匹配的地方 k次就可以了。
#include <bits/stdc++.h>
using namespace std;
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef unsigned long long ULL;
typedef pair<int,int> PII;
const int N=100010,P=131;
ULL h[310][N]; //表示系统进化树上每个生物字符串的哈希值
ULL h1[N]; //表示待确定亲缘关系的生物字符串的哈希值
ULL p[N];
int n,q,m,k;
string s;
ULL find1(int i,int l,int r) //返回h[i]字符串中l到r的哈希值
{return h[i][r]-h[i][l-1]*p[r-l+1];
}
ULL find2(int l,int r) //返回字符串中l到r的哈希值
{return h1[r]-h1[l-1]*p[r-l+1];
}
bool check(int i,int l,int r)
{return find1(i,l,r)==find2(l,r);
}
int main()
{ios;cin>>n>>q>>m>>k;p[0]=1;for (int i=1;i<N;i++) p[i]=p[i-1]*P;for (int i=0;i<n;i++){cin>>s;for (int j=1;j<=s.size();j++) h[i][j]=h[i][j-1]*P+s[j-1];}while (q--){cin>>s;for (int i=1;i<=s.size();i++) h1[i]=h1[i-1]*P+s[i-1];int ans=0;for (int i=0;i<n;i++){int now=0;for (int j=1;j<=m;j++) {if (!check(i,j,j)){if (++now>k) break;}else {int l=j,r=m;while (l<r) //二分,快速找到下一处不匹配的位置{int mid=l+r+1>>1;if (check(i,l,mid)) l=mid;else r=mid-1;}j=l; //返回不匹配的位置}}if (now<=k) ans++;}cout<<ans<<endl;}return 0;
}
相关文章:

相似基因序列问题 ——查找
【题目背景】 生物的遗传物质存在个体间或种群水平的差异,这样的差异被称为遗传变异。突变及基因重组等因素都会导致遗传变异。尽管亲代在将其遗传信息传递给子代时会发生遗传变异,但是这些遗传变异仅占遗传物质的一小部分,通常亲代和子代之…...

【汇编】“转移”综述、操作符offset、jmp指令
文章目录 前言一、转移综述1.1 :背景:1.2 转移指令1.3 转移指令的分类按转移行为根据指令对IP修改的范围不同 二、操作符offset2.1 offset操作符是干什么的?标号是什么? 2.2 nop是什么? 三、jmp指令3.1 jmp指令的功能3.2 jmp指令&…...

Java格式化类Format
文章目录 Format介绍Format方法- format(格式化)- parseObject(解析) 格式化分类日期时间格式化1. DateFormat常用方法getInstancegetDateInstancegetTimeInstancegetDateTimeInstance 方法入参styleLocale 2. SimpleDateFormat常…...

力扣每日一题-美化数组的最少删除数-2023.11.21
力扣每日一题:美化数组的最少删除数 开篇 今天的力扣每日一题居然写出来了,好开心,迫不及待地把题目分享出来,希望你也能把它狠狠拿下。 题目链接: 2216.美化数组的最少删除数 题目描述 代码思路 创建一个list集合来保存数组&a…...

【练习】检测U盘并自动复制内容到电脑的软件
软件作用: 有U盘插在电脑上后,程序会检测到U盘的路径。 自己可以提前设置一个保存复制文件的路径或者使用为默认保存的复制路径(默认为桌面,可自行修改)。 检测到U盘后程序就会把U盘的文件复制到电脑对应的…...

【计算机毕业设计】Springboot高校论文管理系统 -96280,免费送源码,【开题选题+程序定制+论文书写+答辩ppt书写-原创定制程序】
SpringBoot论文管理系统 摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,高校当然也不例外。论文管理系统是以实际运用为开发背景,运用软件工程原理和开发方…...

nginx 代理接口报404 问题排查
今天遇到一个nginx代理后端接口请求报404的问题,问题是这样的,后端由于服务器没有环境,但是需要和前端联调,于是采用cpolar内网穿透的方式,穿出来了。但是前端请求跨域,于是前端用nginx代理了一下后端接口&…...

JVM 调优指南
文章目录 为什么要学 JVM一、JVM 整体布局二、Class 文件规范三、类加载模块四、执行引擎五、GC 垃圾回收1 、JVM内存布局2 、 JVM 有哪些主要的垃圾回收器?3 、分代垃圾回收工作机制 六、对 JVM 进行调优的基础思路七、 GC 情况分析实例 JVM调优指南 -- 楼兰 JV…...

澳洲猫罐头如何?我亲自喂养过的优质猫罐头分享
猫罐头要符合三点:营养配方完整均衡、原料新鲜优质、生产工艺科学可靠。只有具备这些特点,才是品质上乘的猫罐头。 猫罐头的三个要素,一个都不能少。配方不均衡,营养就不足;原料不新鲜,生产出来的猫罐头就…...

CISP练习测试题
免责声明 文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!!! 某公司准备在业务环境中部署一种新的计算机产品,下列哪一项…...

2023下半年软件设计师考试知识点大全思维导图
软件设计师考试知识点大全思维导图 2023年下半年第一次机考 复习资料 以上是我在学习过程中根据自己的知识结构的特点及刷到的考题 做的导图,有需要的可以留言发原版的 mmap格式文件 方便自己拓展. 软考资料 这是网上找的资料 汇总免费放在这里 吧
[C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数
📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…...

Android Binder 跨进程通信的优势是什么
Android Binder 跨进程通信的优势是什么 Android Binder 是 Android 系统中用于实现跨进程通信的底层机制,具有以下优势: 高效性:Android Binder 使用共享内存技术,在进程间传递数据时不需要进行数据拷贝,从而提高了传…...

HashMap的详细解读
HashMap是Java语言中的一个重要数据结构,它实现了Map接口,允许我们存储键值对,并且可以根据键直接访问对应的值。 特性 键值对存储:HashMap存储的是键值对数据,可以方便的通过键来获取值。无序:HashMap中…...

10个好用的Mac数据恢复软件推荐—恢复率高达99%
如果您正在寻找最好的 Mac 数据恢复软件来检索意外删除或丢失的文件,那么这里就是您的最佳选择。 我们理解,当您找不到 Mac 计算机或外部驱动器上保存的一些重要文件时,会感到多么沮丧和绝望。这些文件非常珍贵,无论出于何种原因…...

EtherCAT从站EEPROM分类附加信息详解:RXPDO(输入过程数据对象)
0 工具准备 1.EtherCAT从站EEPROM数据(本文使用DE3E-556步进电机驱动器)1 分类附加信息——RXPDO(输入过程数据对象) 1.1 分类附加信息规范 在EEPROM字64开始的区域存储的是分类附加信息,这里存储了包括设备信息、SM配置、FMMU配置在内的诸多信息。每个信息在一段连续的…...

释放锁流程源码剖析
1 释放锁流程概述 ReentrantLock的unlock()方法不区分公平锁还是非公平锁。 首先调用unlock()方法。 unlock()底层使用的是Sync.release(1)方法 public void unlock() {<!-- --> sync.release(1); } release(1)方法会调用tryRelease(1)去尝试解锁。 public fin…...

ComText让机器人有了情节记忆
为了让人类与机器人更好地交流,MIT 计算机科学与人工智能实验室的研究员开发了一个名为 ComText 的程序。这款程序给机器人增加了情节记忆,让它们能够接受更加复杂的命令。目前,他们已经在机器人 Baxter 上测试了程序。 机器人没有情景化的记…...

【Leetcode合集】13. 罗马数字转整数
13. 罗马数字转整数 13. 罗马数字转整数 代码仓库地址: https://github.com/slience-me/Leetcode 个人博客 :https://slienceme.xyz 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符…...

centos oracle11g开启归档模式
要在 CentOS 上停止 Oracle 11g 数据库,你可以按照以下步骤操作: 1.登录到操作系统 首先,使用具有足够权限的用户登录到 CentOS 操作系统。通常情况下,你需要以具有 oracle 用户权限的用户登录。 使用 SYSDBA 权限连接到数据库…...

【数据结构初阶】双链表
双链表 1.双链表的实现1.1结口实现1.2申请结点1.3初始化双链表1.4打印双链表1.5尾插1.6尾删1.7头插1.8头删1.9计算大小1.10查找1.11pos位置插入1.12删除pos位置1.12删除双链表 全部码源 1.双链表的实现 1.1结口实现 #include<stdio.h> #include<stdlib.h> #inclu…...

Django实战:从零到一构建安全高效的Web应用
目录 一、概述 二、版本控制和部署 1、Git版本控制 2、Docker部署 三、数据库配置 1、配置数据库设置 2、创建数据库模型 四、URL路由和视图 1、定义URL路由 2、创建视图 五、模板渲染 1、创建模板 2、在视图中使用模板 总结 一、概述 Django是一个高级Python W…...

Docker build报错总结,版本过新大避雷!
1.速度太慢报错,需要换源; 在DOCKERFILE中添加镜像; RUN echo "deb http://mirror.sjtu.edu.cn/debian bookworm main non-free contrib" > /etc/apt/sources.list, 2.即使在Dockerfile中换源,但在bul…...

spider 网页爬虫中的 AWS 实例数据获取问题及解决方案
前言 AAWS实例数据对于自动化任务、监控、日志记录和资源管理非常重要。开发人员和运维人员可以通过AWS提供的API和控制台访问和管理这些数据,以便更好地管理和维护他们在AWS云上运行的实例。然而,在使用 spider 框架进行网页爬取时,我们常常…...

flink的window和windowAll的区别
背景 在flink的窗口函数运用中,window和windowAll方法总是会引起混淆,特别是结合上GlobalWindow的组合时,更是如此,本文就来梳理下他们的区别和常见用法 window和windowAll的区别 window是KeyStream数据流的方法,其…...

【机器学习】特征工程:特征选择、数据降维、PCA
各位同学好,今天我和大家分享一下python机器学习中的特征选择和数据降维。内容有: (1)过滤选择;(2)数据降维PCA;(3)sklearn实现 那我们开始吧。 一个数据集中…...

短视频账号矩阵系统saas管理私信回复管理系统
一、短视频矩阵号系统源码开发层面如何来解决? 1.短视频矩阵号系统源码搭建中,首先开发者需要保证api接口的稳定性 ,保证权限应用场景满足官方平台的开发预期。api---待发布、用户管理与授权绑定、私信回复与评论管理等是非常重要的权限接口。…...

利用ETLCloud自动化流程实现业务系统数据快速同步至数仓
现代企业有不少都完成了数字化的转型,而还未转型的企业或商铺也有进行数字化转型的趋势,由此可见,数据已经成为企业决策的重要依据。企业需要先获取数据,将业务系统数据同步至数仓进行整合,然后再进行数据分析。为了更…...

学习c#的第十六天
目录 C# 正则表达式 定义正则表达式 字符转义 字符类 定位点 分组构造 Lookaround 概览 数量词 反向引用构造 替换构造 替代 正则表达式选项 其他构造 Regex 类 代码示例 实例 1 实例 2 实例 3 C# 正则表达式 正则表达式 是一种匹配输入文本的模式。.Net 框…...

【论文阅读笔记】Deep learning for time series classification: a review
【论文阅读笔记】Deep learning for time series classification: a review 摘要 在这篇文章中,作者通过对TSC的最新DNN架构进行实证研究,探讨了深度学习算法在TSC中的当前最新性能。文章提供了对DNNs在TSC的统一分类体系下在各种时间序列领域中的最成功…...