説明のタイトル
文字列APPAPT
に2つの単語が含まれていますPAT
。
- 最初
PAT
は最初の2
位置P
、最初の4
位置A
、最初の6
位置T
です。 - 2番目
PAT
は13
位P
、14
位A
、16
位T
です。
文字列が与えられた場合、合計でPAT
いくつ形成できますか?
入力フォーマット
が10以下の文字列を含む入力単一ライン5は、のみを含むP
、A
、T
文字の三種類。
出力形式
指定された文字列に含まれる文字数を1行で出力しますPAT
。
結果は比較的大きい可能性があるため、1000000007の残りを取得した結果のみが出力されます。
サンプル
APPAPTを入力してください
サンプル出力
2
問題解決
数学:
解题思路
:
- それぞれについて、前のすべての番号に応じた数を
A
構成できます。PA
P
- それぞれについて、前のすべての番号に応じた数を
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;
}