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 Java (OpenJDK 1.8.0) (judge verdict: Accepted)

import java.util.*;
import static java.lang.Math.*;

public class Main {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		
		// 入力
		int n = sc.nextInt();
		String s = sc.next();
		
		// 計算
		long result = 0;
		int[] sumR = new int[n+1];
		int[] sumG = new int[n+1];
		int[] sumB = new int[n+1];
		for(int i = 0; i < n; i++){
		    char a = s.charAt(i);
		    if(a == 'R'){
		        sumR[i+1] += sumR[i] + 1;
		        sumG[i+1] += sumG[i];
		        sumB[i+1] += sumB[i];
		    }
		    if(a == 'G'){
		        sumR[i+1] += sumR[i];
		        sumG[i+1] += sumG[i] + 1;
		        sumB[i+1] += sumB[i];
		    }
		    if(a == 'B'){
		        sumR[i+1] += sumR[i];
		        sumG[i+1] += sumG[i];
		        sumB[i+1] += sumB[i] + 1;
		    }
		}
		for(int i = 0; i < n; i++){
		    for(int j = i+1; j < n; j++){
		        char a = s.charAt(i);
		        char b = s.charAt(j);
		        if(a == b) continue;
		        if((a == 'R' && b == 'G') || (a == 'G' && b == 'R')){
		            result += sumB[n]-sumB[j+1];
		        }
		        if((a == 'G' && b == 'B') || (a == 'B' && b == 'G')){
		            result += sumR[n]-sumR[j+1];
		        }
		        if((a == 'B' && b == 'R') || (a == 'R' && b == 'B')){
		            result += sumG[n]-sumG[j+1];
		        }
		        if(j-i+j < n && s.charAt(j-i+j) != a && s.charAt(j-i+j) != b) result--;
		    }
		}
		
		// 出力
		System.out.println(result);
	}
	
}