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 Rust (1.42.0) (judge verdict: Accepted)

use std::io::stdin;

fn main() {
    let mut string = String::new();
    stdin().read_line(&mut string);
    let N: usize = string.trim().parse().unwrap();
    string = String::new();
    stdin().read_line(&mut string);
    let S = string.trim();
    let mut sum = 0;

    let R = S.matches("R").count();
    let G = S.matches("G").count();
    let B = S.matches("B").count();

    let S: Vec<char> = S.chars().collect();

    sum = R * G * B;

    for i in 0..N - 2 {
        for j in i + 1..N - 1 {
            let k = j * 2 - i;
            if k >= N {
                break;
            }
            // println!("i = {}, j = {}, k = {}", i, j, k);


            let ichar = S[i];
            let jchar = S[j];
            let kchar = S[k];
            if  ichar != jchar {
                if jchar != kchar {
                    if ichar != kchar {
                        sum -= 1;
                    }
                }
            }
        }
    }

    println!("{}", sum)
}