解题思路:粗看这题,心中有一个大致的想法,肯定是要用到排列组合的,我们认真思考一下,无非是一个位置p的数量乘以a的数量再乘t的数量,好弄吗?不好弄,那我们换个思路乘法不就是几个数相加吗,我们以A为中介,看看他前面的P有多少个,后面T有多少个。当前A可以组成的PAT个数就求完了,再去求其他A的,A算完了题就求完了。。python的和c语言都是这个思路
c语言代码:
#include<stdio.h>
int main()
{
char a[100001];
long long count=0,count_t=0,count_p=0;
int i;
scanf("%s",a);
for(i=0;a[i]!='\0';i++)
{
if(a[i]=='T')
count_t++;
}
for(i=0;a[i]!='\0';i++)
{
if(a[i]=='T')
count_t--;
if(a[i]=='P')
count_p++;
if(a[i]=='A')
count+=(count_p*count_t)%1000000007;
}
printf("%lld\n",count%1000000007);
return 0;
}
python代码:
s=input()
count_t=s.count('T')
count_p=0
count_a=0
count=0
for i in range(len(s)):
if(s[i]=='T') :
count_t-=1
if(s[i]== 'P'):
count_p+=1
if(s[i]=='A'):
count+=count_t*count_p
print(count%1000000007)