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# (.NET Core 3.1.201) (judge verdict: Wrong Answer)

using System;
//(条件１)RGB全部異なる
//(条件２)j-i!=k-j
//まず(1)から考えると、#R*#G*#B(#は、~の数)
//その中から(2)を抜く。N<=4000でi,jがわかるとkも決まるので計算量はO(n^2)
//(2)変形するとk=2j-i

class Program
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        string s = Console.ReadLine();
        int[] A = new int[n];
        int[] C = new int[3];//0=#B, 1=#R, 2=#G
        for(int i=0; i < n; i++)
        {
            A[i] = s[i] % 3;//%3をとるとB(66)=0,G(71)=2,R(82)=1となる
            C[A[i]]++;
        }
        long ans = C[0] * C[1] * C[2];
        for(int j=0; j < n; j++)
        {
            for(int i=0; i < j; i++)
            {
                int k = j + (j - i);
                if (k < n)
                {
                    if (A[i] == A[j]) continue;
                    if (A[i] == A[k]) continue;
                    if (A[k] == A[j]) continue;
                    ans--;
                }
            }
        }
        Console.WriteLine(ans);
    }
}
//class Program
//{
//    static void Main()
//    {
//        int n = int.Parse(Console.ReadLine());
//        string s = Console.ReadLine();
//        int r=0, g=0, b=0;
//        for(int i=0; i < n; i++)
//        {
//            switch (s[i])
//            {
//                case 'R':
//                    r++;
//                    break;
//                case 'G':
//                    g++;
//                    break;
//                case 'B':
//                    b++;
//                    break;
//            }
//        }
//        long sum = r * g * b;
//        int sc = 0;//重複カウント
//        int temp;
//        for(int i = 0; i < n; i++)
//        {
//            for(int j = 0; j < n; j++)
//            {
//                temp = 2 * j - i;
//                if (!(2 <= temp && temp <n)) continue;
//                if (!(i < temp)) continue;
//                if (s[i] != s[j] && s[j] != s[temp]) sc++;
//            }
//        }
//        Console.WriteLine(sum - sc);
//    }
//}