Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) E. DNA Evolution 树状数组
Posted xjhz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) E. DNA Evolution 树状数组相关的知识,希望对你有一定的参考价值。
题意:给你一个字符串只有ATCG四个字符
q个操作,
1操作,将x位置修改成字符c
2操作,求区间[l,r]去匹配e,e一直循环,求所有匹配的数目;
思路:数组数组,注意e的长度为[1,10];
//表示 长度为i 以j为起点的循环节为i 字符为c的位置标记,详见代码;
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<cmath> #include<string> #include<queue> #include<algorithm> #include<stack> #include<cstring> #include<vector> #include<list> #include<set> #include<map> using namespace std; #define LL long long #define pi (4*atan(1.0)) #define eps 1e-14 #define bug(x) cout<<"bug"<<x<<endl; const int N=1e5+10,M=2e6+10,inf=1e9+10; const LL INF=1e18+10,mod=1e9+7; struct AYT { int tree[N]; int lowbit(int x) { return x&-x; } void update(int x,int c) { while(x<N) { tree[x]+=c; x+=lowbit(x); } } int query(int x) { int ans=0; while(x) { ans+=tree[x]; x-=lowbit(x); } return ans; } }; AYT tree[11][11][4];//表示 长度为i 以j为起点的循环节为i 字符为c的位置标记 int gc(char a) { if(a==‘A‘)return 0; if(a==‘T‘)return 1; if(a==‘C‘)return 2; return 3; } char a[N],ch[10]="ATCG"; int main() { scanf("%s",a+1); int n=strlen(a+1); for(int i=1; i<=10; i++) { for(int j=1; j<=i; j++) { for(int k=0; k<4; k++) { for(int l=j; l<=n; l+=i) if(ch[k]==a[l]) tree[i][j][k].update(l,1); } } } int q; scanf("%d",&q); while(q--) { int t; scanf("%d",&t); if(t==1) { int x; char f[2]; scanf("%d%s",&x,f); if(a[x]==f[0])continue; for(int i=1; i<=10; i++) { for(int j=1; j<=i; j++) { if(x%i==j%i) for(int k=0; k<4; k++) { if(a[x]==ch[k]) tree[i][j][k].update(x,-1); if(f[0]==ch[k]) tree[i][j][k].update(x,1); } } } a[x]=f[0]; } else { int l,r,ans=0; char f[12]; scanf("%d%d%s",&l,&r,f+1); int len=strlen(f+1); for(int i=1; i<=len; i++) { int x=gc(f[i]); int s=(l+i-1)%len?(l+i-1)%len:len; ans+=tree[len][s][x].query(r)-tree[len][s][x].query(l-1); } printf("%d\n",ans); } } return 0; }
以上是关于Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) E. DNA Evolution 树状数组的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #423 (Div. 2) A-C
Codeforces Round #423 (Div. 2) C 思维,并查集 或 线段树 D 树构造,水
Codeforces Round #423 (Div. 2)A B C D
Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem A - B