PAT 乙级 1040 有几个PAT (25分)
程序员文章站
2022-06-08 08:08:44
...
PAT 乙级 1040 有几个PAT
题目
输入样例:
APPAPT
输出样例:
2
题外话
借鉴的CSDN某大佬的代码,真的感觉这个方法超级棒,我自己刚开始一上来先搞了好几层循环,测试点一个一个的都运行超时,后来又换了种思路,想用类似于在线处理的方法,结果写了几十行代码越写越乱,关键是测试点还都运行错误。。。枯了~~
这个代码先把‘T’的个数算出来,在进行for循环,遇到T,就相应的减一,代码超简洁而且复杂度为O(n),太厉害了!!
源码:
#include<stdio.h>
#include<string.h>
int main()
{
char str[100100];
long long count_p = 0,count_a = 0, count_t = 0;
scanf("%s", str);
for (int i = 0; i < strlen(str); i++) {
if (str[i] == 'T')count_t++;
}
for (int i = 0; i < strlen(str); i++) {
if (str[i] == 'P')count_p++;
if (str[i] == 'T')count_t--;
if (str[i] == 'A')count_a = count_a+count_p * count_t;
}
printf("%d", count_a % 1000000007);
return 0;
}