解题思路:找到字符串中所有A的位置,统计A左边字符P的个数为nump,A右边字符T的个数numt;
结果ans+=nump*numt,最后不要忘记取模。
代码如下:
#include<bits/stdc++.h>
#define lowbit(x) ((x)&(-(x)))
#define ll long long
#define INF 0x3f3f3f3f
#define CLR(a) memset(a, 0, sizeof(a))
using namespace std;
const int maxn=100005;
char s[maxn];
int nump[maxn];
int main() {
int cnt=0;
int numt=0;
int ans=0;
scanf("%s",s);
int len=strlen(s);
for(int i=0;i<len;i++){
if(s[i]=='P')
cnt++;
nump[i]=cnt;
}
for(int i=len-1;i>=0;--i){
if(s[i]=='T')
numt++;
if(s[i]=='A'){
ans=(ans+(numt*nump[i])%1000000007)%1000000007;
}
}
printf("%d\n",ans);
return 0;
}