核苷酸(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 ...
随机推荐
- 常量池与方法区以及又读new String对象创建问题
又拿出这道String str1 = new String("abc");创建几个对象的面试题梳理了一下常量池与方法区的关系,希望能把这两者的关系通过这道面试题说明白 方法区是什么 ...
- 【转帖】Linux mount 域控权限的共享目录
https://www.linuxidc.com/Linux/2012-09/71388.htm 之前一直以为没法 映射 home 域的内容 其实还有一个地方.. 注意 空格的话 需要用 \ 进行转移 ...
- CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第三节
原文链接 第三节:错误处理和全局内存性能局限 恭喜!通过对CUDA(Compute Unified DeviceArchitecture,即计算统一设备架构的首字母缩写)系列文章第一节和第二节,您现在 ...
- Cobbler自动安装的Linux系统ssh无法进入
Linux ssh登陆老提示“permission denied,please try again” ,但是iptables已经关掉了 修改/etc/ssh/sshd_config文件.找如下的一句 ...
- 用css去除chrome、safari等webikt内核浏览器对控件默认样式
有这么一个webkit的私有属性: -webkit-appearance:none; /*去除input默认样式*/ 添加该样式,并且值为'none'时即可取消浏览器对于控件的默认样式. 另外这个属性 ...
- require.js模块化开发
模块化开发的原因: 1.引入的js过多然后在加载的过程中容易出现假死的状态,导致页面会发生白屏 2.变量名的问题 在多人协作开发的时候容易出现变量名的冲突 面向对象 3.引入优先级的问题 模块化开发分 ...
- Centos7 PHP的安装和配置
前面Nginx和httpd的安装都是为了支持PHP而弄的,然后这个目标就给了我一沉重的打击,等我慢慢道来,先来说说PHP的安装和配置吧. 一.PHP的安装 1.由于linux的yum源不存在php7. ...
- 开发监测keepalived裂脑的脚本
检测思路:在备节点上执行脚本,如果可以ping通主节点并且备节点有VIP就报警,让人员介入检查是否裂脑. 在LB02备节点上开发脚本并执行: [root@lb02 ~]# cat /server/sc ...
- Centos7多内核情况下修改默认启动内核方法
1.1 进入grub.cfg配置文件存放目录/boot/grub2/并备份grub.cfg配置文件 [root@linux-node1 ~]# cd /boot/grub2/ [root@linux ...
- 【CSS】CSS 的优先级总结
样式的优先级 多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External styl ...