いくつかのPAT 1040(25分)
最初の二つは、PATされた2つのワード列APPAPT PATが含ま§、図4(A)は、図6(T)ビットビット、第PATであります3§、図4(A)をビット、6(T)のビット。
さて、文字列与えられ、どのように多くの合計PATを形成することができますか?
入力フォーマット:
以上10 ^ 5の文字列を含む入力単一行
文字のみP、A、T三種類を含むが、。
出力フォーマット:
与えられた文字列への出力ライン数は、PATが含まれています。結果は、比較的大きくてもよいように、十億七の出力のみが残りの結果を取ります。
サンプル入力:
APPAPT
サンプル出力:
2
問題解決のアイデアを:最初の最後の位置から横断を開始、その後、それぞれ対応するPの数をカウントし、T統計の数は、Aに直面したとき、その後、PとTの数の積の数をカウントして表示され最後に、剰余へ
#include <iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = 100005;
char str[MAXN];
int p[MAXN] = { 0 };
int main() {
scanf("%s",str);
int length = strlen(str);
int countT = 0;
int total = 0;
for (int i = 0; i < length; i++){
if (i>0){
p[i] = p[i - 1];
}
if (str[i] == 'P'){
p[i]++;
}
}
for (int i = length-1; i >=0; i--){
if (str[i] == 'T'){
countT++;
}
if (str[i] == 'A'){
total = (total+p[i]*countT) % 1000000007;
}
}
printf("%d\n", total);
return 0;
}