前缀和+判断即可
上代码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
这里说件事,(s[i]=='R')...判断,true的话会返回1,否则返回0。
#include<bits/stdc++.h>
using namespace std;
int n,r[4005],g[4005],b[4005];
long long ans;
string s;
int main()
{
cin>>n;
cin>>s;
for(int i=0;i<s.size();i++)
{
r[i+1]=r[i]+(s[i]=='R');
g[i+1]=g[i]+(s[i]=='G');
b[i+1]=b[i]+(s[i]=='B');
}
for(int i=1;i<=n-2;i++)
{
for(int j=i+1;j<=n-1;j++)
{
if((s[i-1]=='R'&&s[j-1]=='G')||(s[i-1]=='G'&&s[j-1]=='R'))
{
ans+=b[n]-b[j];
if(s[j+(j-i)-1]=='B') ans--;
}
else if((s[i-1]=='R'&&s[j-1]=='B')||(s[i-1]=='B'&&s[j-1]=='R'))
{
ans+=g[n]-g[j];
if(s[j+(j-i)-1]=='G') ans--;
}
else if((s[i-1]=='G'&&s[j-1]=='B')||(s[i-1]=='B'&&s[j-1]=='G'))
{
ans+=r[n]-r[j];
if(s[j+(j-i)-1]=='R') ans--;
}
}
}
printf("%lld",ans);
return 0;
}
欢迎参考