这题比较简单,直接ac了。 思路:用信息换时间问题,暴力解法的问题在于获取了很多没用的信息(对应的pat字符在哪一位,如果是不同的字符串,需要将每个打印出来,那确实需要这些信息,而现在这些信息是无用的),这题是知道个数即可,需要从计算的角度考虑,而不需要把每个点都遍历出来。 ac代码
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
char str[100000];
int main()
{
long long count=0;
int p=0;
int a=0;
int t=0;
int p1=0,a1=0,t1=0;
scanf("%s",str);
int l=strlen(str);
for(int i=0;i<l;i++)
{
if(str[i]=='P') p++;
if(str[i]=='A') a++;
if(str[i]=='T') t++;
}
for(int i=0;i<l;i++)
{
if(str[i]=='P') p1++;
if(str[i]=='A')
{
count+=p1*(t-t1);
}
if(str[i]=='T') t1++;
}
printf("%ld",count00000007);
return 0;
}