RT,本机造的数据:
input
18
GHHGHHHHHHGGGHHHGH
output
35
本机输出 35,放到洛谷 ide 上跑就输出 55,勾选 O2 后在 ide 上直接 T 掉了。感觉是有 ub,但不知道具体是哪里出问题了,求神仙帮帮……
//author:望远星
#include<bits/stdc++.h>
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define mk make_pair
#define sml(x,y) (x=min(x,y))
#define big(x,y) (x=max(x,y))
#define ll long long
#define ull unsigned long long
#define db double
#define fo(i,x,y) for(int i=x;i<=y;++i)
#define go(i,x,y) for(int i=x;i>=y;--i)
using namespace std;
inline int read(){int x=0,fh=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')fh=-1;ch=getchar();}while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*fh;}
inline void out(int *a,int l,int r){fo(i,l,r) cout<<*(a+i)<<' ';puts("");}
const int N=5e5+5;
vector<int> g;
int n;
char a[N];
ll ans;
ll calc(){
int si=g.size()-1;
//for(int i:g) cout<<i<<' ';putchar('\n');
fo(i,1,si-1) ans+=(g[i]-g[i-1])*(g[i+1]-g[i]+0ll)-1;
}
signed main(){
cin>>n;scanf("%s",a+1);
g.pb(0);fo(i,1,n) if(a[i]=='G') g.pb(i);g.pb(n+1);
ans+=calc();
g.clear();
g.pb(0);fo(i,1,n) if(a[i]=='H') g.pb(i);g.pb(n+1);
ans+=calc();
fo(i,1,n-1) if(a[i]!=a[i+1]) ans-=2;
cout<<ans;
return 0;
}