A - ABA and BAB
一、分析
这道题要计算出ABA和BAB组合出的字符串的变化情况并对MOD取模。
首先想到子串中出现ABAB和BABA这两种情况的处理是一样的,他们的变换只会产出两种变化,如ABAB=>ABAB/AB;只会变成这两种情况,那么将长度延长,可以发现“ABA”串的长度的规律:
BAB//长度为3,变化为2种情况
1.BAB
2.BABAB//长度为4,变化为2种情况
1.ABAB
2.ABBABAB//长度为5,变化为3种情况
1.BABAB
2.BAB
3.BBABABA//长度为6,变化为3种情况
1.BABABA
2.BABA
2.BA
得出结论:变化情况=长度/3+1;
由此可以写出代码。
二、代码
#include<iostream>
#define int long long
using namespace std;
const int MOD=1e9+7;
signed main(){int n;cin>>n;string s;cin>>s;int ans=1;int now=0;//用于计长度for(int i=1;i<s.length();i++){if(s[i]!=s[i-1]){now++;}else{if(now>=1)ans*=(now+2)/2;ans%=MOD;now=0;}}if(now>=1)ans*=(now+2)/2;ans%=MOD;cout<<ans<<endl;
}