PATグレードB1040にはいくつかのPAT25(ポイント)があります

トピック

文字列に APPAPT は2つの単語が含まれ PAT 、最初の単語は2 PAT 番目の位置( P )、ビット4( A )、ビット6( T )、2番目の単語 PAT はビット3( P )、ビット4( A )、6ビット( T )です。

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

入力フォーマット:

以下の文字列からなる入力一行10 510 ^ 5 。1 0 5 、のみ含まれ手紙の3種類。 P A T

出力フォーマット:

指定された文字列が1行にいくつ含まれているかを出力します PAT 結果は比較的大きい可能性があるため、1000000007の残りを取得した結果のみが出力されます。

入力サンプル:

APPAPT

サンプル出力:

2

コード


#include<iostream>
using namespace std;
int main()
{
    
    
	long long cal = 0;
	long long *p=new long long[100000], * a = new long long[100000], * t = new long long[100000], i = 0;
	string in="";
	cin >> in;
	for (i = 0; i < 100000; i++)
	{
    
    
		p[i] = 0;
		a[i] = 0;
		t[i] = 0;
	}
	i = 0;
	while (in[i++] != '\0')
		if (in[i - 1] == 'P')
			p[i-1]++;
		else if(in[i - 1] == 'A')
			a[i-1]++;
		else if(in[i - 1] == 'T')
			t[i-1]++;
	for (i = 99998; i >= 0; i--)
		t[i] += t[i + 1];
	for (i = 0; i < 100000; i++)
		a[i] *= t[i];
	for (i = 99998; i >= 0; i--)
		a[i] += a[i + 1];
	for (i = 0; i < 100000; i++)
		if (p[i] != 0)
			cal += p[i] *a[i];
	cout << cal % 1000000007;
	return 0;
}

質問の詳細リンク

おすすめ

転載: blog.csdn.net/qq_41985293/article/details/115035365