AC啦
2023-07-19 11:36:18
发布于:广东
18阅读
0回复
0点赞
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 100010
#define wyc 1000000007
using namespace std;
int n,ans,v[N],f[N][5][5][5];
char c[N];
int main()
{
scanf("%s",c+1);
n=strlen(c+1);
for(int i=1;i<=n;++i){
if(c[i]=='?')v[i]=0;
else if(c[i]=='A')v[i]=1;
else if(c[i]=='C')v[i]=2;
else if(c[i]=='G')v[i]=3;
else v[i]=4;
}
for(int i=1;i<=4;++i)
for(int j=1;j<=4;++j)
if(v[1]==j||!v[1])
f[1][i][j][j]=1;
for(int i=1;i<n;++i)
for(int c=1;c<=4;++c)
if(!v[i]||v[i]==c)
for(int a=1;a<=4;++a)
for(int b=1;b<=4;++b){
if(!v[i+1]){
for(int d=1;d<=4;++d){//?的情况
if(a==c)(f[i+1][b][d][d]+=f[i][a][b][c])%=wyc;
if(c!=d)(f[i+1][a][b][d]+=f[i][a][b][c])%=wyc;
}
}
else{
if(a==c)(f[i+1][b][v[i+1]][v[i+1]]+=f[i][a][b][c])%=wyc;
if(c!=v[i+1])(f[i+1][a][b][v[i+1]]+=f[i][a][b][c])%=wyc;
}
}
for(int a=1;a<=4;++a)
for(int b=1;b<=4;++b)
(ans+=f[n][a][b][a])%=wyc;
printf("%d",ans);
return 0;
}
这里空空如也
有帮助,赞一个