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: Wrong Answer)

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {


		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String[] sArray = sc.next().split("");
		int[] rList = new int[n+1];
		int[] gList = new int[n+1];
		int[] bList = new int[n+1];
		int redCount = 0;
		int greenCount = 0;
		int blueCount = 0;
		for(int i =0;i < sArray.length;i++) {
			if(sArray[i].equals("R")) {
				redCount++;
				rList[i+1]++;
			}
			if(sArray[i].equals("G")) {
				greenCount++;
				gList[i+1]++;
			}
			if(sArray[i].equals("B")) {
				blueCount++;
				bList[i+1]++;
			}
		}
		long answer = redCount * greenCount * blueCount;
		if(answer == 0) {
			System.out.println(0);
			return;
		}
		for(int red =1;red <= n;red++) {
			if(rList[red] ==0) {
				continue;
			}
			for(int green =1;green <= n;green++) {
				if(gList[green] ==0) {
					continue;
				}
				if(red > green) {
					if(red + (red -green)<=n) {
						if(bList[(red + (red -green))] == 1) {
							answer--;
						}
					}
					if(green - (red -green)>0) {
						if(bList[(green - (red -green))] == 1) {
							answer--;
						}
					}
				}else {
					if(green + (green -red)<=n) {
						if(bList[(green + (green -red))] == 1) {
							answer--;
						}
					}
					if(red - (green -red)>0) {
						if(bList[(red - (green -red))] == 1) {
							answer--;
						}
					}

				}
				if((red + green)%2 ==0 ) {
					if(bList[((red +green)/2)] == 1) {
						answer--;
					}
				}
			}
		}

		System.out.println(answer);
	}

}