✨这道题难相通的就是思路。从字符串最后往前看,如果遇到T,则说明前面如果有A1,A2,的话有两种可能,A1 P, A2 P,
若前面再遇到P1 P2,那么组成的PAT的可能就有 P1 A1 T , P1 A2 T, P2 A1 T, P2 A2 T(即,每一个P都会和后面AT组成一次PAT)
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
cin>>s;
long i = s.length()-1;
long t = 0;
long at = 0;
long pat = 0;
while(i>=0){
if(s[i] =='T'){
t ++;
t = t%1000000007;
}
if(s[i] == 'A'){
at = at+t;
at = at % 1000000007;
}
if(s[i] == 'P'){
pat = pat + at;
pat = pat % 1000000007;
}
i--;
}
cout<<pat<<endl;
}