タイトル説明
カッコウドンはとても頭がいいのですが、最近宇宙からの宇宙線に襲われ、マインドダウンに見舞われ、英語のレベルがゼロになりました!これらすべての創始者であるコズミックドッグは、何も知りません!この時、ググドンは親切な人に会いました-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;
}