Problem p02385 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <iostream>

using namespace std;

int color[6];

class DICE {
public:
  void set_num(int a[]) {
    for (int i = 0; i < 6; i++) {
      dicenum[i] = a[i];
    }
  }
  void make_move(char c) {
    int temp;
    if (c == 'N') {
      temp = dicenum[4];
      dicenum[4] = dicenum[0];
      dicenum[0] = dicenum[1];
      dicenum[1] = dicenum[5];
      dicenum[5] = temp;
    }
    if (c == 'S') {
      temp = dicenum[1];
      dicenum[1] = dicenum[0];
      dicenum[0] = dicenum[4];
      dicenum[4] = dicenum[5];
      dicenum[5] = temp;
    }
    if (c == 'E') {
      temp = dicenum[2];
      dicenum[2] = dicenum[0];
      dicenum[0] = dicenum[3];
      dicenum[3] = dicenum[5];
      dicenum[5] = temp;
    }
    if (c == 'W') {
      temp = dicenum[3];
      dicenum[3] = dicenum[0];
      dicenum[0] = dicenum[2];
      dicenum[2] = dicenum[5];
      dicenum[5] = temp;
    }
  }
  void get_color() {
    for (int i = 0; i < 6; i++)
      color[i] = dicenum[i];
  }

private:
  int dicenum[6];
};

int main() {
  int a[6], b[6];
  bool ok = false, f;
  DICE dice;
  for (int i = 0; i < 6; i++)
    cin >> a[i];
  for (int i = 0; i < 6; i++)
    cin >> b[i];
  dice.set_num(a);
  for (int i = 0; i < 6; i++) {
    for (int j = 0; j < 6; j++) {
      for (int k = 0; k < 6; k++) {
        for (int l = 0; l < 6; l++) {
          for (int m = 0; m <= i; m++)
            dice.make_move('N');
          for (int m = 0; m <= j; m++)
            dice.make_move('S');
          for (int m = 0; m <= k; m++)
            dice.make_move('E');
          for (int m = 0; m <= l; m++)
            dice.make_move('W');
          f = true;
          dice.get_color();
          for (int m = 0; m < 6; m++) {
            if (color[m] != b[m])
              f = false;
          }
          if (f) {
            cout << "Yes\n";
            ok = true;
            i = 4;
            j = 4;
            k = 4;
            l = 4;
          }
        }
      }
    }
  }
  if (!ok)
    cout << "No\n";
  return 0;
}


Fixed submission:
#include <iostream>

using namespace std;

int color[6];

class DICE {
public:
  void set_num(int a[]) {
    for (int i = 0; i < 6; i++) {
      dicenum[i] = a[i];
    }
  }
  void make_move(char c) {
    int temp;
    if (c == 'N') {
      temp = dicenum[4];
      dicenum[4] = dicenum[0];
      dicenum[0] = dicenum[1];
      dicenum[1] = dicenum[5];
      dicenum[5] = temp;
    }
    if (c == 'S') {
      temp = dicenum[1];
      dicenum[1] = dicenum[0];
      dicenum[0] = dicenum[4];
      dicenum[4] = dicenum[5];
      dicenum[5] = temp;
    }
    if (c == 'E') {
      temp = dicenum[2];
      dicenum[2] = dicenum[0];
      dicenum[0] = dicenum[3];
      dicenum[3] = dicenum[5];
      dicenum[5] = temp;
    }
    if (c == 'W') {
      temp = dicenum[3];
      dicenum[3] = dicenum[0];
      dicenum[0] = dicenum[2];
      dicenum[2] = dicenum[5];
      dicenum[5] = temp;
    }
  }
  void get_color() {
    for (int i = 0; i < 6; i++)
      color[i] = dicenum[i];
  }

private:
  int dicenum[6];
};

int main() {
  int a[6], b[6];
  bool ok = false, f;
  DICE dice;
  for (int i = 0; i < 6; i++)
    cin >> a[i];
  for (int i = 0; i < 6; i++)
    cin >> b[i];
  dice.set_num(a);
  for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
      for (int k = 0; k < 5; k++) {
        for (int l = 0; l < 5; l++) {
          for (int m = 0; m <= i; m++)
            dice.make_move('N');
          for (int m = 0; m <= j; m++)
            dice.make_move('S');
          for (int m = 0; m <= k; m++)
            dice.make_move('E');
          for (int m = 0; m <= l; m++)
            dice.make_move('W');
          f = true;
          dice.get_color();
          for (int m = 0; m < 6; m++) {
            if (color[m] != b[m])
              f = false;
          }
          if (f) {
            cout << "Yes\n";
            ok = true;
            i = 4;
            j = 4;
            k = 4;
            l = 4;
          }
        }
      }
    }
  }
  if (!ok)
    cout << "No\n";
  return 0;
}