这是一个数学问题,容易想到对于字符串中每个A而言,若其前面有m个P,后面有n个T,可以得到对于当前的A,能够组成m*n种情况的PAT。我们可以先统计出T的总个数,依次遍历字符串,遇到P则统计P的个数++,遇到T则T个数--,遇到A则令结果加上当前P数量和T数量的乘积。最后将结果模给定的数输出即可。这里若数太大在中间计算过程中就爆long long的话可以每一步都模那个大数,不过PAT数据向来比较亲民,这个题不用考虑这种情况。程序如下:
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
string s;
cin >> s;
int T = 0, P = 0;
for (int i = 0; i < s.length(); ++i)
{
if(s[i]=='T') T++;
}
long long res = 0;
for (int i = 0; i < s.length(); ++i)
{
if(s[i]=='P') P++;
if(s[i]=='T') T--;
if(s[i]=='A') res += P*T;
}
cout << res%1000000007 << endl;
return 0;
}