ABC 162 D - RGB Triplets (组合数学)

题目传送门

思路:

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
typedef long long ll;
char s[4005];
ll ans;
int main(){
	int n,a[3]={};
	scanf("%d",&n);
	scanf("%s",s+1);
	for(int i=1;i<=n;i++){
		if(s[i]=='R') a[0]++;
		else if(s[i]=='G') a[1]++;
		else a[2]++;
	} 
	ans=(ll)a[0]*a[1]*a[2];
	for(int i=1;i<n;i++)
		for(int d=1;i+d+d<=n;d++)
			if((s[i]^s[i+d]^s[i+d+d])==('R'^'G'^'B')) --ans;
	printf("%lld\n",ans);
	return 0;
}