每遇到一个P,把P计数器加一。每遇到一个A,把A计数器加上P计数器的值。每遇到一个T,把T计数器加上A计数器的值。按题目要求,A计数器和T计数器要对1000000007取余,否则可能上溢。
#include <iostream>
#include <cstdio>
#include <cstdlib>
const int N = 1000000007;
const int M = 110000;
int main(int argc, char** argv) {
char str[M];
int Pcnt, Acnt, Tcnt, i;
Pcnt = Acnt = Tcnt = 0;
scanf("%s", str);
for(i = 0; str[i] != '\0'; i++){
if(str[i] == 'P'){
Pcnt++;
}
else if(str[i] == 'A'){
Acnt += Pcnt;
Acnt %= N;
}
else if(str[i] == 'T'){
Tcnt += Acnt;
Tcnt %= N;
}
}
printf("%d", Tcnt);
return 0;
}