如题,统计PAT出现的个数,注意PAT不一定要相邻,看题目给的例子就知道了。
num1代表目前为止P出现的个数,num12代表目前为止PA出现的个数,num123代表目前为止PAT出现的个数。
遇到P,num1++。
遇到A,那么PA的个数为:前面统计的PA的个数(num12)+前面的P与当前A组成的个数(num1)
遇到T,那么PAT的个数为:前面统计的PAT的个数(num123)+前面的PA与当前的T组成的个数(num12)
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> using namespace std; const int maxn=100000+5; const int mod=1000000007; char str[maxn]; int main() { scanf("%s",str); int len=strlen(str); int num1=0,num12=0,num123=0; for(int i=0;i<len;i++){ if(str[i]=='P'){ num1++; } else if(str[i]=='A'){ num12=(num12+num1)%mod; } else{ num123=(num123+num12)%mod; } } printf("%d",num123); return 0; }