PAT乙级|C语言|1040 有几个PAT (25分)

题目

字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。

现给定字符串,问一共可以形成多少个 PAT

输入格式:
输入只有一行,包含一个字符串,长度不超过10510^5,只包含 PAT 三种字母。

输出格式:
在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。

输入样例:

APPAPT

输出样例:

2

AC代码

  • 主要还是数学问题吧,这类问题会一点点数学还是很快ac的。
  • 不需要读入字符串,输入作为一个整体的字符串没有价值。逐一读入并做统计即可。
  • 每次遇到P,统计P的数量;sum_P为当前读入的P的数量。
  • 每次遇到A,统计PA组合的数量:在A前面的每一个P都能和该A组成不同PA组合。将该A能组成的PA组合的数量加到sum_PA中。
  • 每次遇到T,统计PAT组合的数量:在T前面的每一个PA组合都能和该T组成不同PAT组合。将该T能组成的PAT的数量加到sum_PAT中。
  • 套娃:统计PATNB的数量,只需继续套娃:每次遇到N,统计当前PATN的数量;每次遇到B,统计当前PATNB的数量;可无限套娃。
#include<stdio.h>
int sum_p;
int sum_PA;
long long sum_PAT;	//该用long就用long,这点空间微不足道
int main(){
    for(char temp;(temp=getchar())!='\n';){
        if(temp=='P')sum_p++;
        if(temp=='A')sum_PA+=sum_p;
        if(temp=='T')sum_PAT+=sum_PA;
    }
    printf("%d",sum_PAT%1000000007);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章