Problem p00457 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <algorithm>
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int p[10000] = {0}, f[10000] = {0}, o[10000] = {0};
int X(int x) {
  int e, z, u, t = 0, k, g = 0, w;
  for (e = 0; e < x; e++) {
    u = 0;
    w = 0;
    if (o[e] != 0) {
      for (z = e; z < x; z++) {
        if (o[e] == o[z])
          u++;
        else if (o[z] == 0)
          w++;
        else
          break;
      }
      if (u >= 4) {
        t = 1;
        for (k = 0; k < w + u; k++)
          o[e + k] = 0;
      }
    }
    if (o[e] != 0)
      g++;
  }
  if (t == 1)
    return X(x);
  return g;
}
int main() {
  // int a[1000],b=0;
  while (1) {
    int n, i, j, m, l;
    cin >> n;
    if (n == 0)
      break;
    memset(f, 0, sizeof(f));
    for (i = 0; i < n; i++)
      cin >> p[i];
    for (i = 0; i < n; i++) {
      if (p[i] == p[i - 1] && i != 0)
        f[i] = f[i - 1];
      else {
        for (j = i; j < n; j++) {
          if (p[i] == p[j])
            f[i]++;
          else
            break;
        }
      }
    }
    m = n;
    for (i = 0; i < n; i++) {
      if ((i != n - 1 && p[i] != p[i + 1] && 1 + f[i + 1] >= 4) ||
          i != 0 && p[i] != p[i - 1] && 1 + f[i - 1] >= 4 ||
          p[i + 1] == p[i - 1] && i != 0 && i != n - 1 &&
              f[i] + f[i + 1] + f[i - 1] >= 4 && f[i] == 1) {
        for (j = 1; j <= 3; j++) {
          for (l = 0; l < n; l++)
            o[l] = p[l];
          if (o[i] != j) {
            o[i] = j;
            m = min(m, X(n));
          }
        }
      }
    }
    /*a[b]=m;
    b++;*/
    cout << m << endl;
  }
  // for(int r=0;r<b;r++)cout<<a[r]<<endl;
  return 0;
}


Error: TLE

Fixed submission:

#include <algorithm>
#include <iostream>
#include <stdio.h>
using namespace std;
int p[10000] = {0}, f[10000] = {0}, o[10000] = {0};
int X(int x) {
  int e, z, u, t = 0, k, g = 0, w;
  for (e = 0; e < x; e++) {
    u = 0;
    w = 0;
    if (o[e] != 0) {
      for (z = e; z < x; z++) {
        if (o[e] == o[z])
          u++;
        else if (o[z] == 0)
          w++;
        else
          break;
      }
      if (u >= 4) {
        t = 1;
        for (k = 0; k < w + u; k++)
          o[e + k] = 0;
      }
    }
    if (o[e] != 0)
      g++;
  }
  if (t == 1)
    return X(x);
  return g;
}
int main() {
  // int a[1000],b=0;
  while (1) {
    int n, i, j, m, l;
    cin >> n;
    if (n == 0)
      break;
    for (i = 0; i < n; i++)
      cin >> p[i];
    for (i = 0; i < n; i++) {
      if (p[i] == p[i - 1] && i != 0)
        f[i] = f[i - 1];
      else {
        for (j = i; j < n; j++) {
          if (p[i] == p[j])
            f[i]++;
          else
            break;
        }
      }
    }
    m = n;
    for (i = 0; i < n; i++) {
      if (i != n - 1 && p[i] != p[i + 1] && f[i] + f[i + 1] >= 4 ||
          i != 0 && p[i] != p[i - 1] && f[i] + f[i - 1] >= 4) {
        for (j = 1; j <= 3; j++) {
          for (l = 0; l < n; l++)
            o[l] = p[l];
          if (o[i] != j) {
            o[i] = j;
            m = min(m, X(n));
          }
        }
      }
    }
    /*a[b]=m;
    b++;*/
    cout << m << endl;
  }
  // for(int r=0;r<b;r++)cout<<a[r]<<endl;
  return 0;
}