[TJOI2017]DNA --- 后缀数组
[TJOI2017]DNA
题目描述
加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,
有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够表现出吃藕的性状。
现在研究人员想知道这个基因在DNA链\(S_{0}\)上的位置。
所以你需要统计在一个表现出吃藕性状的人的DNA序列\(S_{0}\)上,有多少个子串可能是该基因,
即有多少个\(S_{0}\)的子串修改小于等于三个字母能够变成S。
输入输出格式
输入格式:
第一行有一个数T,表示有几组数据
每组数据第一行一个长度不超过\(10^{5}\)的碱基序列\(S_{0}\)
每组数据第二行一个长度不超过\(10^{5}\)的吃藕基因序列S
输出格式:
共T行,第i行表示第i组数据中,在\(S_{0}\)中有多少个与S等长的连续子串可能是表现吃藕性状的碱基序列
输入输出样例
说明
对于20%的数据,\(S_{0}\),S的长度不超过\(10^{4}\)
对于20%的数据,\(S_{0}\),S的长度不超过\(10^{5}\),0<T<=10
作为后缀数组的模板集成题来做的。
首先考虑一个比较容易想到的事情.
\(S_{0}\)大串中存在长度和\(S\)相同的串只有\(n\)个
因此只要一个一个暴力判断就好了。
怎么判断快一点??
比如串'ACGAC'和串'ACAAC'
前面的'AC'相同,因此可以直接调用。
到了'G'和'A'不同,来一个\(tim\)计数器表示失配了几次,此时,\(tim++\)
接下了后面的'AC'相同,因此这个子串和模式串只有一处不同。
可以发现,每当\(tim<=3\)匹配完成一次时,\(ans++\)
那么,怎么得到'AC'相同这个过程??
用后缀数组的LCP或者哈希二分LCP或后缀树跑LCP即可
后缀数组复杂度\(O(n \log n + n * 6)\) = \(O(n \log n)\)
[TJOI2017]DNA --- 后缀数组的更多相关文章
- [TJOI2017] DNA - 后缀数组,稀疏表
[TJOI2017] DNA Description 求模式串与主串的匹配次数,容错不超过三个字符. Solution 枚举每个开始位置,进行暴力匹配,直到失配次数用光或者匹配成功.考虑到容错量很小, ...
- [BZOJ4892][TJOI2017]DNA(后缀数组)
题目描述 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够表现出吃藕的性状 ...
- 洛谷P3763 [TJOI2017]DNA(后缀数组 RMQ)
题意 题目链接 Sol 这题打死我也不会想到后缀数组的,应该会全程想AC自动机之类的吧 但知道这题能用后缀数组做之后应该就不是那么难了 首先把\(S\)和\(S0\)拼到一起跑,求出Height数组 ...
- BZOJ.4892.[TJOI2017]DNA(后缀自动机/后缀数组)
题目链接 \(Description\) 给出两个串\(S,T\),求\(T\)在\(S\)中出现了多少次.出现是指.可以有\(3\)次(\(3\)个字符)不匹配(修改使其匹配). \(Solutio ...
- 洛谷P3763 [Tjoi2017]DNA 【后缀数组】
题目链接 洛谷P3763 题解 后缀数组裸题 在BZOJ被卡常到哭QAQ #include<algorithm> #include<iostream> #include< ...
- 【BZOJ4892】DNA(后缀数组)
[BZOJ4892]DNA(后缀数组) 题面 BZOJ 洛谷 题解 看到这道题目,我第一反应是\(FFT\)??? 然后大力码出了一个\(FFT\) 就像这样 #include<iostream ...
- [洛谷P3763] [TJOI2017]DNA
洛谷题目链接:[TJOI2017]DNA 题目描述 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其 ...
- 字符串 --- KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组
涉及到字符串的问题,无外乎这样一些算法和数据结构:自动机 KMP算法 Extend-KMP 后缀树 后缀数组 trie树 trie图及其应用.当然这些都是比较高级的数据结构和算法,而这里面最常用和最熟 ...
- poj 3294 后缀数组 多字符串中不小于 k 个字符串中的最长子串
Life Forms Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 16223 Accepted: 4763 Descr ...
随机推荐
- rxjs自定义operator
rxjs自定义operator
- 如何关闭sublime更新提示
前提:sublime已激活
- 【Tomcat】 windows下注册tomcat服务以及设置jvm参数
注册服务: 1 >cd /d D:\Java\tomcat-7.0.57-Css\bin //进入目录 1 >service.bat install //注册服务,同理删除服务为 rem ...
- vscode中go插件配置
# 转自:http://www.mamicode.com/info-detail-2436665.html # https://blog.csdn.net/bing2011/article/detai ...
- Linux sqlite3基本命令
简介sqlite3一款主要用于嵌入式的轻量级数据库,本文旨在为熟悉sqlite3基本命令提供技术文档. 备注:本文所有操作均在root用户下进行. 1.安装sqlite3 ubuntu下安装sqlit ...
- [ python ] 练习作业 - 2
1.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者. lic = [0, 1, 2, 3, 4, 5] def func(l): return l[1::2 ...
- Nginx - 隐藏或修改版本号
1. 前言 无论是修改 Nginx 版本还是隐藏 Nginx 版本号,都是很简单的操作,对外来说,相对更安全些. 2. 修改 Nginx 版本号 对于修改 Nginx 版本号来说,需要在源码的基础上进 ...
- Webmin忘记密码解决方法,及配置文件介绍
Webmin忘记Web登陆时候的密码,无法登陆了,Google了一下,基本方法是通过changepass.pl可以修改密码 首先找到changepass.pl这个文件目录 $sudo locate c ...
- PTP简介
PTP简介 在通信网络中,许多业务的正常运行都要求网络时钟同步,即整个网络各设备之间的时间或频率差保持在合理的误差水平内.网络时钟同步包括以下两个概念: l 时间同步:也叫相 ...
- deep learning 资源汇总
不定时更新..... 首先是吴老爷子在优酷的视频,可惜外音太大了:http://list.youku.com/albumlist/show?id=21508721&ascending=1&am ...