题目描述
blablabla
用变量来存前一个g/h的位置用来更新r[N]少写个for
#include<iostream>
using namespace std;
const int N = 5e5+10;
int l[N],r[N];
int n;
int g,h,tg=5e5+9,th=5e5+9;//把tg,th初始化到大于n的地方
//tg,th用来记录前一个g、h的位置
int main()
{
cin>>n;
string s;
cin>>s;
for(int i=0;i<n;i++)
{
if(s[i]=='G')
{
tg=i;//更新g的位置
g++;
l[i]=h;
h=0;
r[th]++;
}
else
{
th=i;//更新h的位置
h++;
l[i]=g;
g=0;
r[tg]++;
}
}
//记得开long long
long long ans=0;
for(int i=0;i<=n-1;i++)
ans+=(long long)l[i]*r[i]+max(l[i]-1,0)+max(r[i]-1,0);
cout<<ans;
}