B - DNA Sequence(思维)
Posted CCSU_Cola
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B - DNA Sequence(思维)相关的知识,希望对你有一定的参考价值。
题目链接
题意:给你一个串,A和T匹配,G和C匹配,问有多少个子串可以通过重排列和原来的子串匹配。
思路:只需子串里的A的数量等于T的数量,C的数量等于G的数量,那么串通过重新排列就可以和原来的串匹配。如何判断某个区间的A和T数量是否相等,可以将A的值定为1,T的值定为-1。当某个前缀和为0的时候说明数量相等,且当某个前缀减去另一个前缀的值为0的时候,该段区间内的数量也相等。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int sum1[5010],sum2[5010];
int main(){
int n;
string str;
cin>>n;
cin>>str;
for(int i=0;i<str.size();i++){
sum1[i]=sum1[i-1];
sum2[i]=sum2[i-1];
if(str[i]=='A'){
sum1[i]++;
}
else if(str[i]=='T'){
sum1[i]--;
}
else if(str[i]=='G'){
sum2[i]--;
}
else sum2[i]++;
}
ll ans=0;
for(int i=0;i<str.size();i++){
if(sum1[i]==0&&sum2[i]==0){//直接为0
ans++;
}
for(int j=i+1;j<str.size();j++){
if(sum1[j]-sum1[i]==0&&sum2[j]-sum2[i]==0){//相减为0
ans++;
}
}
}
printf("%lld\\n",ans);
return 0;
}
以上是关于B - DNA Sequence(思维)的主要内容,如果未能解决你的问题,请参考以下文章
POJ1699 Best Sequence(AC自动机+状压DP)
POJ 2778 DNA Sequence ( Trie图矩阵快速幂 )
POJ 2778 DNA Sequence(AC自动机+矩阵)