欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(复习)1040 有几个PAT (25分)

程序员文章站 2022-06-08 08:53:33
...

(复习)1040 有几个PAT (25分)

本题参考了大神的思路,是真的好

/*思路;每次扫描到A,用这个A组成的PAT刚好是A前面的P数量*A后面T的数量。
so,遍历一遍字符串,存下每个位置前面A的数量。
然后从后遍历计数T的数量,扫描到A 就总数加上  A前面的P数量*A后面T的数即可

然后每次sum要相加都两次取模。*/
#include <stdio.h>
#include <string.h>

int main(){
  char a[100001];
  gets(a);
  int len = strlen(a);
  int i,countt=0,countp=0,sum=0;
  for(i=len-1;i>=0;i--){
    if(a[i]=='T'){
      countt++;
    }
  }
  for(i=0;i<len;i++){
    if(a[i]=='P') countp++;
    if(a[i]=='T') countt--;
    if(a[i]=='A') sum=(sum+(countt*countp)%1000000007)%1000000007;
  }
  printf("%d",sum);
}