题目链接:AB-string
考虑计算不合法的字符串。
我们可以发现形式为:
_______ AB
AB_______
BA_______
_______BA
用总方案减去即可。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e5+10;
int n,res; char str[N];
signed main(){
scanf("%lld %s",&n,str+1);
for(int i=1,cnt=0;i<=n;i++){
if(str[i]=='B') res+=cnt,cnt=0;
else cnt++;
}
for(int i=1,cnt=0;i<=n;i++){
if(str[i]=='A') res+=cnt,cnt=0;
else cnt++;
}
reverse(str+1,str+1+n);
for(int i=1,cnt=0;i<=n;i++){
if(str[i]=='B') res+=max(0LL,cnt-1),cnt=0;
else cnt++;
}
for(int i=1,cnt=0;i<=n;i++){
if(str[i]=='A') res+=max(0LL,cnt-1),cnt=0;
else cnt++;
}
cout<<n*(n-1)/2-res;
return 0;
}