PATレベルB-いくつかのPATがあります

説明のタイトル
文字列APPAPTに2つの単語が含まれていますPAT

  • 最初PATは最初の2位置P、最初の4位置A、最初の6位置Tです。
  • 2番目PATは13P、14A、16Tです。

文字列が与えられた場合、合計でPATいくつ形成できますか?

入力フォーマット
が10以下の文字列を含む入力単一ライン5は、のみを含むPAT文字の三種類。

出力形式
指定された文字列に含まれる文字数を1行で出力しますPAT

結果は比較的大きい可能性があるため、1000000007の残りを取得した結果のみが出力されます。

サンプル
APPAPTを入力してください

サンプル出力
2


問題解決
数学:

解题思路

  1. それぞれについて、前のすべての番号に応じた数をA構成できますPAP
  2. それぞれについて、前のすべての番号に応じた数をT構成できますPATPA
#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