PAT B 1040(C ++) - ロングブラシ弟のタイトルパス

いくつかの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;
}
公開された46元の記事 ウォンの賞賛0 ビュー581

おすすめ

転載: blog.csdn.net/qq_23079139/article/details/104101521