核苷酸(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。

另,最伟大的创造是光合作用。

来源

lhy

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)的更多相关文章

  1. 差分进化算法 DE-Differential Evolution

    差分进化算法 (Differential Evolution)   Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化 ...

  2. Evolution项目(1)

    Evolution项目是基于NFine修改的项目 主要改动为: 支持了.net core 1.0 支持了 EF core 1.0 支持数据库自动创建及Demo数据自动灌入 修改了授权方式 新增加了一个 ...

  3. ubuntu 14.04 下evolution邮箱客户端设置(腾讯企业邮箱)

    安装 evolution 有PPA可用,支持 Ubuntu 14.04 及衍生系统.打开终端,输入以下命令: sudo add-apt-repository ppa:fta/gnome3 sudo a ...

  4. 计算DNA中每种核苷酸的数目

    问题描述:计算DNA中每种核苷酸的数目 输入文件内容: 代码: 输出结果:

  5. 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 ...

  6. GFS: Evolution on Fast-forward

    GFS: Evolution on Fast-forward by Marshall Kirk McKusick, Sean Quinlan | August 7, 2009 A discussion ...

  7. 长期演进技术(LTE,Long Term Evolution)

    /********************************************************************************* * 长期演进技术(LTE,Long ...

  8. UNIX Filesystems - Evolution Design and Implementation.pdf

    UNIX Filesystems - Evolution Design and Implementation.pdf

  9. UVA 1481 Genome Evolution

    Xi, a developmental biologist is working on developmental distances of chromosomes. A chromosome, in ...

随机推荐

  1. 管理员必备的几个Linux系统监控工具

    需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成性 ...

  2. nodejs 爬虫

    参考了各位大大的,然后自己写了个爬虫 用到的modules:utils.js     ---    moment module_url.js var http = require("http ...

  3. MySQL - EXISTS 和 NOT EXISTS

    语法规则:   SELECT * FROM tableName t WHERE 1 = 1 AND 2 = 2 AND EXISTS (SELECT * FROM tableName t2 WHERE ...

  4. spring data事务

    事务在spring data中的使用 1:事务一般在service层.因为一个service方法可能会多次调用不同的dao,为了保证事务的完整性,那么多次的dao都放到一个方法里面 2:读的时候可以不 ...

  5. JavaScript 字符串分行、Return 语句使用注意事项

    JavaScript 字符串分行 JavaScript 允许我们在字符串中使用断行语句: var x ="Hello World!"; 但是,在字符串中直接使用回车换行是会报错的: ...

  6. PHP 优化

    来源:歪麦博客 https://www.awaimai.com/1050.html 1 字符串 1.1 少用正则表达式 能用PHP内部字符串操作函数的情况下,尽量用他们,不要用正则表达式, 因为其效率 ...

  7. Oracle 数据库密码过期问题

    (1)在CMD命令窗口中输入:           sqlplus 用户名/密码@数据库本地服务名 as sysdba;(如:sqlplus scott/1234@oracle1 as sysdba; ...

  8. ARM Linux内核源码剖析索引

    start_kernel -->asm-offset.h 生成 -->proc_info_list   -->machine_desc -->__vet_atags --> ...

  9. vscode运行C/C++程序及配置

    安装vscdoe,安装tdm-gcc-64编译器,这样可以自动把mingw的目录添加到环境变量中,其实安装其他编译器本版都可以,只要手动添加环境变量即可.平台win10-64位.此文参考了哔哩哔哩的配 ...

  10. 将SpringBoot默认Json解析框架jackson替换成fastjson

    步骤一:引入依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson< ...