csp-m3-T4 CuckooEast英語を学ぶ

タイトル説明

カッコウドンはとても頭がいいのですが、最近宇宙からの宇宙線に襲われ、マインドダウンに見舞われ、英語のレベルがゼロになりました!これらすべての創始者であるコズミックドッグは、何も知りません!この時、ググドンは親切な人に会いました-TT、そしてTTはググドンに猫をしゃぶりながら英語を学ぶように教えました。今日、TTはググドンに文字Aと文字Bを教えるつもりです。TTはググドンがこれらの文字を区別できるように、大文字のAとBのみからなるシーケンスをググドンに与えました。しかし、カッコウドンの他の主題のレベルはまだそこにあり、熱心なググドンはTTをテストするための質問を思いつきました:カッコウはストリングTTのいくつのサブストリングがおいしいか尋ねました。TTはこの問題を解決できますが、猫を吸った後にミス・フイエが更新したことを発見しました。彼はこの質問に答えたくなかったので、あなたに投げました。彼がこの問題を解決するのを手伝ってくれませんか。Deliciousの定義:文字列の場合、文字列の各文字が1より大きいpalindromeサブ文字列に属している場合にのみ、文字列がDeliciousであると見なされます。

説明を入力してください

最初の行に正の整数nを入力して、文字列の長さを示し、次の行(長さnの大文字のAとBで構成される文字列)を示します。

出力の説明

出力は1行のみで、タイトルの要件を満たすサブストリングの数を示します。

サンプル入力

5
AABBB

サンプル出力

6

説明例

この例では、基準を満たす6つのサブストリングは次のとおりです。
ここに写真の説明を挿入

データ構成

ここに写真の説明を挿入

アイデア

質問Cの正しい解決策。
慎重に検討した結果、
今すぐ実行するのは非常に面倒で、その方法がわかりません。したがって、実行が難しい場合は、答え=すべてのサブ文字列-不正な文字列です。
不正な文字列の
例をさらにいくつか描くことができます。次の場合、合法的な文字列は4つしかありません。
思考能力を調べる
ABB ... BB
BAA ... AA
AA ... AAB
BB ... BBA
したがって、すべての違法な状況を列挙することで、すべてのスコアを取得できます。
違法な文字列
[ABB ... BB、BAA ... AA、AA …AAB、BB…BBA]
連続セクション識別するには、左右に文字があるかどうかを判断します。
細部注:ABは2回カウントされるため、
PSを慎重に検討する必要があります。T1も連続セクションを認識します。
ここに写真の説明を挿入

コード

#include<iostream>
using namespace std;
const int maxn=3e5+10;
char c[maxn];
int main()
{
    
    

	int n;
	cin>>n;
	cin>>c;
	long long ans=(long long)n*(n-1)/2;
	int i=0;
	int l=0;
	int r=0;
	while(c[i]==c[0])
	{
    
    
		l++;
		i++;		
	}
	ans-=(n-l);
	int now=c[0];
	for(i;i<n;i++)
	{
    
    
		if(c[i]!=now)
		{
    
    
			ans++;	
			now=c[i];		
		}

	}
	i=n-1;
	while(c[i]==c[n-1])
	{
    
    
		i--;
		r++;
	}
	ans-=(n-r);
//	cout<<l<<' '<<ans<<' '<<r<<endl;
	cout<<ans<<endl;
 
	return 0;
 } 

おすすめ

転載: blog.csdn.net/alicemh/article/details/106095876