超时解法= =
#include<iostream>
using namespace std;
char arr[100010];
int main()
{
long long num = 0;
cin >> arr;
char* p = arr;
char* tmp1 = p;
char* tmp2 = p;
char* tmp3 = p;
int flag = 1;
while (*p != '\0')
{
tmp1 = p;
if (*tmp1 == 'P')
{
int flag = 0;
p++;
// AP PA APTTATTAAATATATTTAAT
for (tmp2 = tmp1 + 1; *tmp2 != '\0'; tmp2++)
{
if (*tmp2 == 'A')
{
for (tmp3 = tmp2 + 1; *tmp3 != '\0'; tmp3++)
{
if (*tmp3 == 'T')
{
flag = 1;
num++;
}
}
}
}
}
else
{
p++;
continue;
}
if (!flag)
{
break;
}
}
cout << num % 1000000007;
return 0;
}
某柳姓大神的解法(实在NB)
#include<iostream>
using namespace std;
int main()
{
string s;
cin >> s;
int len = s.length();
long long countp = 0, countt = 0;
long long num = 0;
for (int i = 0; i < len; i++)
{
if (s[i] == 'T')
countt++;
}
for (int i = 0; i < len; i++)
{
if (s[i] == 'P')
countp++;
if (s[i] == 'T')
countt--;
if (s[i] == 'A')
num += countp * countt;
}
cout << num % 1000000007;
return 0;
}
第三种AC解法:
#include<iostream>
#include<cstring>
using namespace std;
char arr[100010];
int main()
{
cin >> arr;
int len = strlen(arr);
long long t = 0, at = 0, pat = 0;
for (int i = len - 1; i >= 0; i--)
{
if (arr[i] == 'T')
t++;
if (arr[i] == 'A')
at += t;
if (arr[i] == 'P')
pat += at;
}
cout << pat % 1000000007;
return 0;
}