1040 有几个PAT (25分)
- 和1045快排那个思想很像
- 左边、右边的分别累加在数组中存入
#include<iostream>
#include<vector>
#include<cctype>
#include<map>
#include<set>
#include<sstream>
#include<string>
#include<cstdio>
#include<algorithm>
#define inf 0x3f3f3f3f
#define MOD 1000000007
const int maxn=100005;
typedef long long ll;
using namespace std;
int leftsum[maxn];
int main() {
string s;cin>>s;
for(int i=0;i<s.size();i++){
if(i>0) leftsum[i]=leftsum[i-1];
if(s[i]=='P') leftsum[i]++;
}
int rightsum=0,ans=0;
for(int i=s.size()-1;i>=0;i--){
if(s[i]=='T') rightsum++;
else if(s[i]=='A') ans=(ans+leftsum[i]*rightsum)%MOD;
}
cout<<ans<<"\n";
return 0;
}