PAT B 1040 有几个PAT(C语言)

一、题目

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

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

输入格式:
输入只有一行,包含一个字符串,长度不超过10^​5​​ ,只包含 P、A、T 三种字母。

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

输入样例:
APPAPT
输出样例:
2

作者: CAO, Peng
单位: Google
时间限制: 150 ms
内存限制: 64 MB
代码长度限制: 16 KB

二、思路

1、求出串中所有T的个数;
2、从头遍历,过程中记录从开始至当前位置P的个数,并减去遇到的T的个数
3、若遇到A,PAT数为当前P的个数乘T的个数;

三、代码实现

#include 
int main()
{
     
    int nP=0,nT=0,n=0;
    long sum=0;
    char c,str[100001];
    while( (c=getchar()) != '\n' )
    {
     
        str[n++]=c;
        if( c == 'T' )
            nT++;
    }
    for(int i=0 ; i<n ; i++)
        if( str[i] == 'P' )
            nP++;
        else if( str[i] == 'T' )
            nT--;
        else
            sum+=nP*nT;
    printf("%d",sum%1000000007);
}

你可能感兴趣的:(PAT,B,PAT乙级)