题意:

解法:
d[i][j]表示前i步,y为j的方案数,
初始条件为d[0][0]=d[0][1]=1,
然后枚举下一步x的选择进行dp的转移(方案数统计)即可,
code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=3e5+5;
int d[maxm][2];
int f[maxm];
int n;
void solve(){
cin>>n;
for(int i=1;i<=n;i++){
string s;cin>>s;
if(s[0]=='A'){
f[i]=1;
}else if(s[0]=='O'){
f[i]=2;
}
}
d[0][0]=d[0][1]=1;
for(int i=1;i<=n;i++){
if(f[i]==1){
d[i][0]+=d[i-1][0];
d[i][0]+=d[i-1][1];
d[i][0]+=d[i-1][0];
d[i][1]+=d[i-1][1];
}else if(f[i]==2){
d[i][0]+=d[i-1][0];
d[i][1]+=d[i-1][1];
d[i][1]+=d[i-1][0];
d[i][1]+=d[i-1][1];
}
}
cout<<d[n][1]<<endl;
}
signed main(){
ios::sync_with_stdio(0);
solve();
return 0;
}