核苷酸(evolution)
核苷酸(evolution)
题目描述
生物课是帕特里克最讨厌的课程,没有之一。
相比做一些无聊而又无趣的遗传题,他更喜欢其他所有的科目。
包括英语。
但是今天不同。他被一个关于RNA感染DNA的题目所吸引了。
我希望能够实现这样的一个功能。
DNA中包含四种核苷酸,上面具有不同的含氮碱基,分别是:腺嘌呤(A)、胸腺嘧啶(T)、鸟嘌呤(G)、胞嘧啶(C)。我们可以用形如ATTGCA...的字符串来代表一条脱氧核苷酸序列。
我们需要追踪一段高变异生物的核苷酸序列。在这种生物中,其DNA序列很容易发生替换,即将某一位的核苷酸替换为其他核苷酸。
我们有一段感染串,这一条DNA单链极有可能替换原来DNA链中的核苷酸。已知这条单链会作用于[l,r][l,r]中的位置。这条单链会不重叠复制成一条长链,然后顺序感染[l,r][l,r]中的核苷酸。如果两个位置间的核苷酸不同,那么DNA链上的核苷酸就会被替换。
现在研究人员想知道,对于感染串TT,在[l,r][l,r]上有多少个位置不会受到感染。
输入
第一行一串字符串,初始DNA链SS。SS仅由A,T,G,C四个大写字母组成。
接下来一行带有一个整数QQ。接下来QQ行每行一个询问,格式如下:
1 x C,表示第xx位置上的核苷酸被替换成字符CC。
2 l r T,表示有可能有一个感染串TT,在[l,r][l,r]间作用。
注意,每次感染串并不会对原串做出任何修改。
输出
对于每个查询22,输出不会受感染的核苷酸位置数量。
样例输入
【样例1输入】
ATGCATGC
4
2 1 8 ATGC
2 2 6 TTT
1 4 T
2 2 6 TA
【样例2输入】
GAGTTGTTAA
6
2 3 4 TATGGTG
1 1 T
1 6 G
2 5 9 AGTAATA
1 10 G
2 2 6 TTGT
样例输出
【样例1输出】
8
2
4
【样例2输出】
0
3
1
提示
你可以将感染串理解成一个循环节为|T||T|的无限长字符串。
请结合两个样例理解其意义。
对于30%的数据,1≤|S|,Q≤1031≤|S|,Q≤103。
对于另外10%的数据,没有修改操作。
对于另外10%的数据,基因串仅由A,T两字符构成。
对于所有数据,满足:1≤|S|,Q≤105,1≤|T|≤101≤|S|,Q≤105,1≤|T|≤10,询问中x,l,r≤|S|x,l,r≤|S|。所有字符与字符串均只包含A,T,G,C。
另,最伟大的创造是光合作用。
来源
solution
令a[p][m][r][x]表示S串中前x个位置
有多少个字母p (ATGC)的位置
模m
余r
对于每一位s[x]
a[s[x]][mod][i%mod][x]++;
前缀和维护即可
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,Q,m,a[4][11][11][100005],op,pl,l,r;
char s[100005],ch[15],dy[200],tt;
void jia(int c,int p,int r,int x,int v){
for(;x<=n;x+=(x&-x))a[c][p][r][x]+=v;
}
int cha(int c,int p,int r,int x){
int vv=0;
for(;x>0;x-=(x&-x))vv+=a[c][p][r][x];
return vv;
}
int main()
{
dy['A']=0;dy['T']=1;dy['G']=2;dy['C']=3;
scanf("%s",s+1);
n=strlen(s+1);
for(int i=1;i<=n;i++){
for(int mod=1;mod<=10;mod++){
jia(dy[s[i]],mod,i%mod,i,1);
}
}
cin>>Q;
while(Q--){
scanf("%d",&op);
if(op==1){
scanf("%d %c",&pl,&tt);
for(int mod=1;mod<=10;mod++){
jia(dy[s[pl]],mod,pl%mod,pl,-1);
jia(dy[tt],mod,pl%mod,pl,1);
}
s[pl]=tt;
}
else {
scanf("%d%d%s",&l,&r,ch);
m=strlen(ch);
int sum=0;
for(int i=0;i<m;i++){
int s1=cha(dy[ch[i]],m,(i+l)%m,l-1);
int s2=cha(dy[ch[i]],m,(i+l)%m,r);
sum+=s2-s1;
}
printf("%d\n",sum);
}
}
return 0;
}
核苷酸(evolution)的更多相关文章
- 差分进化算法 DE-Differential Evolution
差分进化算法 (Differential Evolution) Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化 ...
- Evolution项目(1)
Evolution项目是基于NFine修改的项目 主要改动为: 支持了.net core 1.0 支持了 EF core 1.0 支持数据库自动创建及Demo数据自动灌入 修改了授权方式 新增加了一个 ...
- ubuntu 14.04 下evolution邮箱客户端设置(腾讯企业邮箱)
安装 evolution 有PPA可用,支持 Ubuntu 14.04 及衍生系统.打开终端,输入以下命令: sudo add-apt-repository ppa:fta/gnome3 sudo a ...
- 计算DNA中每种核苷酸的数目
问题描述:计算DNA中每种核苷酸的数目 输入文件内容: 代码: 输出结果:
- ON THE EVOLUTION OF MACHINE LEARNING: FROM LINEAR MODELS TO NEURAL NETWORKS
ON THE EVOLUTION OF MACHINE LEARNING: FROM LINEAR MODELS TO NEURAL NETWORKS We recently interviewed ...
- GFS: Evolution on Fast-forward
GFS: Evolution on Fast-forward by Marshall Kirk McKusick, Sean Quinlan | August 7, 2009 A discussion ...
- 长期演进技术(LTE,Long Term Evolution)
/********************************************************************************* * 长期演进技术(LTE,Long ...
- UNIX Filesystems - Evolution Design and Implementation.pdf
UNIX Filesystems - Evolution Design and Implementation.pdf
- UVA 1481 Genome Evolution
Xi, a developmental biologist is working on developmental distances of chromosomes. A chromosome, in ...
随机推荐
- python内置函数map/reduce/filter
python有几个内置的函数很有意 思:map/filter/reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是python列表方法的三架 ...
- windows平台下MongoDB安装和环境搭建
下载安装包或者压缩包 添加db存储和日志存储文件夹 添加服务.配置环境变量.启动Mongo 本例:安装路径:D:Program Files/MongoDB 配置文件的路径:D:MongoDB 一.安装 ...
- C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖
学习C++必定会遇到重载.重写.重定义.概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了. 概念,特点: 重载: 直白点说就是函数名字相同,传参的个数,类型不一样.判断标准在于 ...
- Python_列表、字典、字符串、集合操作
一.list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素.对于list的操作,我们要学会增删改查. 查 我们可以直接索引查找,也可以通过切片 ...
- vue系列之vue cli 3引入ts
插件 Vue2.5+ Typescript 引入全面指南 vue-class-component强化 Vue 组件,使用 TypeScript/装饰器 增强 Vue 组件 vue-property-d ...
- 课时5.什么是URL(理解)
其实浏览器的地址栏中输入的地址就是一个URL. http://127.0.0.1/index.html(浏览器会自动添加:80) http://127.0.0.1:80/index.html(这是浏览 ...
- PHP跨域请求nodejs
摘要:用nodejs作为服务器,php作为客服端进行跨域请求,并返回数据. 一:windows环境下的nodejs安装(以及express模板的安装):http://blog.uifanr.com/2 ...
- 17.VUE学习之- v-for指令的使用方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python9-MySQL-MySQL-ORM框架-day48
ORM框架:AQLAlchemy-作用: 1.提供简单的规则 2.自动转换成SQL语句 -DB first: 手动创建数据库以及表 -> ORM框架 -> 自动生成类 code first ...
- [BZOJ1503]郁闷的出纳员(Splay)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...