2019年2月18日
15:29
思维,每个A前P数量和后T数量之积的和
#include <iostream>
#include <string>
using namespace std;
typedef long long LL;
const LL mod = 1000000007;
const LL maxn = 1e5 +5;
int main()
{
string s;
LL p[maxn], t[maxn];
while(cin >> s)
{
LL cnt = 0;
for(LL i = 0; i < s.size(); i++)
{
char x = s[i];
if(x == 'P')
cnt++;
if(x == 'A')
p[i] = cnt;
}
cnt = 0;
for(LL i = s.size() - 1; i >= 0; i--)
{
char x = s[i];
if(x == 'T')
cnt++;
if(x == 'A')
t[i] = cnt;
}
LL ans = 0;
for(LL i = 0; i < s.size(); i++)
{
if(p[i] != 0 && t[i] != 0)
{
ans = (ans + (p[i] * t[i]) % mod) % mod;
}
}
cout << ans << endl;
}
return 0;
}