从前向后扫描:
每个A对应的PA组合数量是A之前P的数量,
每个T对应的PAT组合数量是T之前所有A对应的PA组合数量的累加,
所有的PAT组合数量是所有T对应的PAT组合数量的累加
#include <stdio.h>
#define LIM 1000000007
int main() {
unsigned int P = 0, PA = 0, PAT = 0;
char c;
while((c = getchar()) != '\n') {
if(c == 'P') P++;
if(c == 'A') PA = (PA + P) % LIM;
if(c == 'T') PAT = (PAT + PA) % LIM;
}
printf("%d", PAT);
return 0; }