Problem p00457 (C++) — buggy submission, verdict: Runtime Error

#include "bits/stdc++.h"
#include <unordered_map>
#include <unordered_set>
#pragma warning(disable : 4996)
using namespace std;
using ld = long double;
template <class T> using Table = vector<vector<T>>;
const ld eps = 1e-9;

//// < "D:\\D_Download\\Visual Studio
///2015\\Projects\\programing_contest_c++\\Debug\\a.txt" > "D:\\D_Download\\Visual
///Studio 2015\\Projects\\programing_contest_c++\\Debug\\b.answer"

int getans(vector<int> &l, deque<int> &r) {
  if (l.empty() || r.empty())
    return 0;
  int lt = l.back();
  int rt = r[0];
  int a = l.size() - 1;
  while (a >= 0) {
    if (lt == l[a]) {
      a--;
    } else {
      break;
    }
  }
  int b = 0;
  while (b <= r.size() - 1) {
    if (rt == r[b]) {
      b++;
    } else {
      break;
    }
  }
  if (lt == rt) {
    int num = (l.size() - 1) - a + b;
    if (num >= 4) {
      int ls = l.size();
      for (int i = a + 1; i < ls; ++i) {
        l.pop_back();
      }
      for (int i = 0; i < b; ++i) {
        r.pop_front();
      }
      return num + getans(l, r);
    } else {
      return 0;
    }
  } else {
    return 0;
  }
}
int getans(const vector<int> &as, int a) {
  int f = a;
  int t = a;
  int color = as[a];
  while (f >= 0) {
    if (color == as[f])
      f--;
    else
      break;
  }
  f++;
  while (t <= as.size() - 1) {
    if (color == as[t])
      t++;
    else
      break;
  }
  t--;
  if (t - f >= 3) {
    vector<int> l(as.begin(), as.begin() + f);
    deque<int> r;
    for (int i = t + 1; i < as.size(); ++i) {
      r.push_back(as[i]);
    }
    return (t - f + 1) + getans(l, r);
  } else {
    return 0;
  }
}
int main() {
  while (1) {
    int N;
    cin >> N;
    if (!N)
      break;
    vector<int> as(N);
    for (int i = 0; i < N; ++i) {
      cin >> as[i];
      as[i]--;
    }
    int ans = 0;
    for (int i = 0; i < N; ++i) {
      for (int j = 0; j < 3; ++j) {
        int a = as[i];
        as[i] = j;
        ans = max(ans, getans(as, i));
        as[i] = a;
      }
    }
    cout << N - ans << endl;
  }

  return 0;
}

Error: WA

Fixed submission:

#include "bits/stdc++.h"
#include <unordered_map>
#include <unordered_set>
#pragma warning(disable : 4996)
using namespace std;
using ld = long double;
template <class T> using Table = vector<vector<T>>;
const ld eps = 1e-9;

//// < "D:\\D_Download\\Visual Studio
///2015\\Projects\\programing_contest_c++\\Debug\\a.txt" > "D:\\D_Download\\Visual
///Studio 2015\\Projects\\programing_contest_c++\\Debug\\b.answer"

int getans(vector<int> &l, deque<int> &r) {
  int lt = l.back();
  int rt = r[0];
  int a = l.size() - 1;
  while (a >= 0) {
    if (lt == l[a]) {
      a--;
    } else {
      break;
    }
  }
  int b = 0;
  while (b <= r.size() - 1) {
    if (rt == r[b]) {
      b++;
    } else {
      break;
    }
  }
  if (lt == rt) {
    int num = (l.size() - 1) - a + b;
    if (num >= 3) {
      int ls = l.size();
      for (int i = a + 1; i < ls; ++i) {
        l.pop_back();
      }
      for (int i = 0; i < b; ++i) {
        r.pop_front();
      }
      return num + 1 + getans(l, r);
    } else {
      return 0;
    }
  } else {
    return 0;
  }
}
int getans(const vector<int> &as, int a) {
  int f = a;
  int t = a;
  int color = as[a];
  while (f >= 0) {
    if (color == as[f])
      f--;
    else
      break;
  }
  f++;
  while (t <= as.size() - 1) {
    if (color == as[t])
      t++;
    else
      break;
  }
  t--;
  if (t - f >= 3) {
    vector<int> l(as.begin(), as.begin() + f);
    deque<int> r;
    for (int i = t + 1; i < as.size(); ++i) {
      r.push_back(as[i]);
    }
    return (t - f + 1) + getans(l, r);
  } else {
    return 0;
  }
}
int main() {
  while (1) {
    int N;
    cin >> N;
    if (!N)
      break;
    vector<int> as(N);
    for (int i = 0; i < N; ++i) {
      cin >> as[i];
      as[i]--;
    }
    int ans = 0;
    for (int i = 0; i < N; ++i) {
      for (int j = 0; j < 3; ++j) {
        int a = as[i];
        as[i] = j;
        ans = max(ans, getans(as, i));
        as[i] = a;
      }
    }
    cout << N - ans << endl;
  }

  return 0;
}