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 Go (1.14.1) (judge verdict: Accepted)

package main

import "fmt"

func main() {
	var n int
	var s string
	fmt.Scan(&n, &s)

	cs := make(map[byte][]int)
	cs['R'] = make([]int, n+1)
	cs['G'] = make([]int, n+1)
	cs['B'] = make([]int, n+1)
	for i := 0; i < n; i++ {
		c := s[i]

		cs['R'][i+1] = cs['R'][i]
		cs['G'][i+1] = cs['G'][i]
		cs['B'][i+1] = cs['B'][i]

		cs[c][i+1]++
	}

	ans := 0
	for i := 0; i < n-2; i++ {
		rgb := map[byte]int{'R': 0, 'G': 0, 'B': 0}
		rgb[s[i]]++
		for j := i + 1; j < n; j++ {
			if s[i] == s[j] {
				continue
			}
			rgb[s[j]]++

			t := byte('@')
			if rgb['R'] == 0 {
				t = 'R'
			} else if rgb['G'] == 0 {
				t = 'G'
			} else {
				t = 'B'
			}

			cc := cs[t]
			cnt := cc[n] - cc[j]
			d := j - i
			if j+d < n {
				if s[j+d] == t {
					cnt--
				}
			}
			ans += cnt

			rgb[s[j]]--
		}
		rgb[s[i]]--
	}

	fmt.Println(ans)
}