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 Scala (2.13.1) (judge verdict: Accepted)

import java.io.{BufferedOutputStream, BufferedReader, InputStreamReader, PrintWriter}

import scala.collection.mutable

object Main {
  def main(args: Array[String]): Unit = {
    val in = new BufferedReader(new InputStreamReader(System.in))
    val out = new PrintWriter(new BufferedOutputStream(System.out))
    val n = in.readLine().toInt
    val s = in.readLine()

    val rc = Array.ofDim[Int](n)
    val gc = Array.ofDim[Int](n)
    val bc = Array.ofDim[Int](n)

    for (i <- n - 1 to 0 by -1) {
      s(i) match {
        case 'R' => rc(i) = 1
        case 'G' => gc(i) = 1
        case 'B' => bc(i) = 1
      }
      if (i != n - 1) {
        rc(i) += rc(i + 1)
        gc(i) += gc(i + 1)
        bc(i) += bc(i + 1)
      }
    }

    var count = 0L

    for (i <- 0 until n - 2) {
      for (j <- i + 1 until n - 1) {
        if (s(i) != s(j)) {
          count += {
            List('R', 'G', 'B').filter(c => c != s(i) && c != s(j)).head match {
              case 'R' => rc(j + 1) - {
                if (j + j - i < n && s(j + j - i) == 'R') {
                  1
                } else {
                  0
                }
              }
              case 'G' => gc(j + 1) - {
                if (j + j - i < n && s(j + j - i) == 'G') {
                  1
                } else {
                  0
                }
              }
              case 'B' => bc(j + 1) - {
                if (j + j - i < n && s(j + j - i) == 'B') {
                  1
                } else {
                  0
                }
              }
            }
          }
        }
      }
    }

    out.println(count)

    out.flush()
  }

}