
本题参考了大神的思路,是真的好
/*思路;每次扫描到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);
}
本文深入探讨了一种基于字符A的特殊模式匹配算法,通过计算字符串中特定字符组合PAT的出现次数来解决问题。采用两遍扫描策略,首先记录每个位置前A的数量,再从后向前计算T的数量,巧妙地利用了P、A、T三者的关系,实现高效求解。
1040 有几个PAT 25分&spm=1001.2101.3001.5002&articleId=106014161&d=1&t=3&u=e9c77f94a92743689e4ef4a0b10922e7)
325

被折叠的 条评论
为什么被折叠?



