https://i2.wp.com/eblogarithm.com/wp-content/uploads/2017/07/Codeforces-Round-423-Div-2-rated-based-on-VK-Cup-Finals-problem-E-DNA-Evolution-Solution-In-CC1.png?fit=640%2C360

Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals), problem: (E) DNA Evolution Solution In C/C++

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int getnum(char c){
switch(c){
case ‘A’:return 0;
case ‘T’:return 1;
case ‘G’:return 2;
case ‘C’:return 3;
}
}
int N,M;
char S[100100];
char T[20];
long long s[11][11][4][100100];
int lowbit(int x){return x&-x;}
void add(long long A[],int x,long long c){for(int i=x;i<=N;i+=lowbit(i))A[i]+=c;}
long long sum(long long A[],int x){long long re=0;for(int i=x;i;i-=lowbit(i))re+=A[i];return re;}
int main()
{
scanf(“%s”,S);
N=strlen(S);
for(int j=1;j<=10;j++)
for(int i=0;i<N;i++)
add(s[j][(i+1)%j][getnum(S[i])],i+1,1);
int Q,t,x,l,r;
cin>>Q;
for(int q=1;q<=Q;q++){
scanf(“%d”,&t);
if(t==1){
scanf(“%d%s”,&x,T);
for(int j=1;j<=10;j++)
add(s[j][x%j][getnum(S[x-1])],x,-1);
S[x-1]=T[0];
for(int j=1;j<=10;j++)
add(s[j][x%j][getnum(S[x-1])],x,1);
}
else{
scanf(“%d%d%s”,&l,&r,T);
M=strlen(T);
long long ans=0;
for(int i=0;i<M;i++)
ans+=sum(s[M][(l+i)%M][getnum(T[i])],r)-sum(s[M][(l+i)%M][getnum(T[i])],l-1);
printf(“%I64d\n”,ans);
}
}
return 0;
}

(Visited 10 times, 1 visits today)



There are no comments

Add yours

Leave a Reply

%d bloggers like this: