Problem p02714 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
/*
R=0
G=1
B=2
*/

int main() {
  int n;
  string ss;
  cin >> n >> ss;
  long long ans = 0;
  int f[402][3] = {0};
  for (int i = ss.length() - 1; i >= 0; i--) {
    if (ss[i] == 'R') {
      f[i][0] = f[i + 1][0] + 1;
      f[i][1] = f[i + 1][1];
      f[i][2] = f[i + 1][2];
    } else if (ss[i] == 'G') {
      f[i][1] = f[i + 1][1] + 1;
      f[i][0] = f[i + 1][0];
      f[i][2] = f[i + 1][2];
    } else {
      f[i][2] = f[i + 1][2] + 1;
      f[i][0] = f[i + 1][0];
      f[i][1] = f[i + 1][1];
    }
  }
  for (int i = 0; i < n - 1; i++) {
    for (int j = i + 1; j < n; j++) {
      if (ss[i] == 'R' && ss[j] == 'G') {
        ans += f[j][2];
        if (ss[2 * j - i] == 'B')
          ans = ans - 1;
      } else if (ss[i] == 'R' && ss[j] == 'B') {
        ans += f[j][1];
        if (ss[2 * j - i] == 'G')
          ans = ans - 1;
      } else if (ss[i] == 'B' && ss[j] == 'G') {
        ans += f[j][0];
        if (ss[2 * j - i] == 'R')
          ans = ans - 1;
      } else if (ss[i] == 'B' && ss[j] == 'R') {
        ans += f[j][1];
        if (ss[2 * j - i] == 'G')
          ans = ans - 1;
      } else if (ss[i] == 'G' && ss[j] == 'R') {
        ans += f[j][2];
        if (ss[2 * j - i] == 'B')
          ans = ans - 1;
      } else if (ss[i] == 'G' && ss[j] == 'B') {
        ans += f[j][0];
        if (ss[2 * j - i] == 'R')
          ans = ans - 1;
      }
    }
  }
  cout << ans << endl;
  /*
  for(int i=0;i<n;i++){
          cout<<ss[i]<<" ";
      for(int j=0;j<3;j++){
          cout<<f[i][j]<<" ";
      }
      cout<<endl;
  }
  */
  return 0;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
/*
R=0
G=1
B=2
*/

int main() {
  int n;
  string ss;
  cin >> n >> ss;
  long long ans = 0;
  int f[4002][3] = {0};
  for (int i = ss.length() - 1; i >= 0; i--) {
    if (ss[i] == 'R') {
      f[i][0] = f[i + 1][0] + 1;
      f[i][1] = f[i + 1][1];
      f[i][2] = f[i + 1][2];
    } else if (ss[i] == 'G') {
      f[i][1] = f[i + 1][1] + 1;
      f[i][0] = f[i + 1][0];
      f[i][2] = f[i + 1][2];
    } else {
      f[i][2] = f[i + 1][2] + 1;
      f[i][0] = f[i + 1][0];
      f[i][1] = f[i + 1][1];
    }
  }
  for (int i = 0; i < n - 1; i++) {
    for (int j = i + 1; j < n; j++) {
      if (ss[i] == 'R' && ss[j] == 'G') {
        ans += f[j][2];
        if (ss[2 * j - i] == 'B')
          ans = ans - 1;
      } else if (ss[i] == 'R' && ss[j] == 'B') {
        ans += f[j][1];
        if (ss[2 * j - i] == 'G')
          ans = ans - 1;
      } else if (ss[i] == 'B' && ss[j] == 'G') {
        ans += f[j][0];
        if (ss[2 * j - i] == 'R')
          ans = ans - 1;
      } else if (ss[i] == 'B' && ss[j] == 'R') {
        ans += f[j][1];
        if (ss[2 * j - i] == 'G')
          ans = ans - 1;
      } else if (ss[i] == 'G' && ss[j] == 'R') {
        ans += f[j][2];
        if (ss[2 * j - i] == 'B')
          ans = ans - 1;
      } else if (ss[i] == 'G' && ss[j] == 'B') {
        ans += f[j][0];
        if (ss[2 * j - i] == 'R')
          ans = ans - 1;
      }
    }
  }
  cout << ans << endl;
  /*
  for(int i=0;i<n;i++){
          cout<<ss[i]<<" ";
      for(int j=0;j<3;j++){
          cout<<f[i][j]<<" ";
      }
      cout<<endl;
  }
  */
  return 0;
}