核苷酸(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 ...
随机推荐
- 管理员必备的几个Linux系统监控工具
需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成性 ...
- nodejs 爬虫
参考了各位大大的,然后自己写了个爬虫 用到的modules:utils.js --- moment module_url.js var http = require("http ...
- MySQL - EXISTS 和 NOT EXISTS
语法规则: SELECT * FROM tableName t WHERE 1 = 1 AND 2 = 2 AND EXISTS (SELECT * FROM tableName t2 WHERE ...
- spring data事务
事务在spring data中的使用 1:事务一般在service层.因为一个service方法可能会多次调用不同的dao,为了保证事务的完整性,那么多次的dao都放到一个方法里面 2:读的时候可以不 ...
- JavaScript 字符串分行、Return 语句使用注意事项
JavaScript 字符串分行 JavaScript 允许我们在字符串中使用断行语句: var x ="Hello World!"; 但是,在字符串中直接使用回车换行是会报错的: ...
- PHP 优化
来源:歪麦博客 https://www.awaimai.com/1050.html 1 字符串 1.1 少用正则表达式 能用PHP内部字符串操作函数的情况下,尽量用他们,不要用正则表达式, 因为其效率 ...
- Oracle 数据库密码过期问题
(1)在CMD命令窗口中输入: sqlplus 用户名/密码@数据库本地服务名 as sysdba;(如:sqlplus scott/1234@oracle1 as sysdba; ...
- ARM Linux内核源码剖析索引
start_kernel -->asm-offset.h 生成 -->proc_info_list -->machine_desc -->__vet_atags --> ...
- vscode运行C/C++程序及配置
安装vscdoe,安装tdm-gcc-64编译器,这样可以自动把mingw的目录添加到环境变量中,其实安装其他编译器本版都可以,只要手动添加环境变量即可.平台win10-64位.此文参考了哔哩哔哩的配 ...
- 将SpringBoot默认Json解析框架jackson替换成fastjson
步骤一:引入依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson< ...