PAT乙级 ——有几个PAT

题目描述
字符串 APPAPT 中包含了两个单词 PAT

  • 第一个 PAT 是第 2P,第 4A,第 6T
  • 第二个 PAT 是第 3P,第 4A,第 6T

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

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

输出格式
在一行中输出给定字符串中包含多少个 PAT

由于结果可能比较大,只输出对 1000000007 取余数的结果。

输入样例
APPAPT

输出样例
2


题解
数学:

解题思路

  1. 对于每一个 A,它能够构成 PA 的数量取决于它之前所有 P 的数量。
  2. 对于每一个 T,它能够构成 PAT 的数量取决于它之前所有 PA 的数量。
#include <iostream>
using namespace std;

typedef long long LL;

const int mod = 1e9 + 7;

int main()
{
    
    
    string s;
    cin >> s;
    
    LL P = 0, PA = 0, PAT = 0;
    for (int i = 0; i < s.size(); i ++)
        if(s[i] == 'P') P ++;
        else if(s[i] == 'A') PA += P;
        else PAT = (PAT + PA) % mod;
    
    cout << PAT << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_46239370/article/details/113861263