Problem:
Score : 400 points

Problem Statement

We have a string S of length N consisting of R, G, and B.

Find the number of triples (i,~j,~k)~(1 \leq i < j < k \leq N) that satisfy both of the following conditions:

S_i \neq S_j, S_i \neq S_k, and S_j \neq S_k.

j - i \neq k - j.

Constraints

1 \leq N \leq 4000

S is a string of length N consisting of R, G, and B.

Input

Input is given from Standard Input in the following format:

N
S

Output

Print the number of triplets in question.

Sample Input 1

4
RRGB

Sample Output 1

1

Only the triplet (1,~3,~4) satisfies both conditions. The triplet (2,~3,~4) satisfies the first condition but not the second, so it does not count.

Sample Input 2

39
RBRBGRBGGBBRRGBBRRRBGGBRBGBRBGBRBBBGBBB

Sample Output 2

1800

Solution in C++ (GCC 9.2.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;

#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rept(i,k,n) for(int i = (k); i < (int)(n); i++)
#define all(v) v.begin(), v.end()
#define Sort(v) sort(v.begin(),v.end())
#define Reverse(v) reverse(v.begin(),v.end())
#define mod 1000000007
typedef long long ll;
typedef pair<int,int> Pii;
typedef pair<long long,long long> Pll;

template <typename T>
void vecprint(vector<T> &vec) {
    cout<<'[';
    for(T x:vec){
        cout<<x<<',';
    }
    cout<<']'<<endl;
    return;
}

ll pomod(ll a,ll b){
    if(b==1) return a;
    if(b%2) return pomod(a*a%mod,b/2)*a%mod;
    else return pomod(a*a%mod,b/2)%mod;
}

int main() {
    int n;
    string s;
    cin>>n>>s;
    vector<vector<int>> rgb(3,vector<int>(n+1,0));
    for(int i=n-1;i>=0;i--){
        rgb[0][i]=rgb[0][i+1];rgb[1][i]=rgb[1][i+1];rgb[2][i]=rgb[2][i+1];
        if(s[i]=='R') rgb[0][i]++;
        if(s[i]=='G') rgb[1][i]++;
        if(s[i]=='B') rgb[2][i]++;
    }
    ll ans =0;
    map<char,int> mp;
    mp['R']=0;mp['G']=1;mp['B']=2;
    rep(i,n){
        rept(j,i+1,n-1){
            if(s[i]==s[j]) continue;
            int cl = 3-mp[s[i]]-mp[s[j]];
            ans+=rgb[cl][j+1];
            if(j*2-i<=n-1){
                if(mp[s[j*2-i]]==cl) ans--;
            }
        }
    }

    cout<<ans<<endl;
    return 0;
}