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

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class DICE {
private:
  int temp;

public:
  int ii, iii, ji, ij;
  int ans, foo, fooo, ansDice3;
  int dice[6], dice2[6];
  int cpyDice[6], cpyDice2[6];
  void cpy() {
    for (ii = 0; ii < 6; ii++) {
      cpyDice[ii] = dice[ii];
    }
  }
  void rollN() { roll(1, 5, 4); }
  void rollS() { roll(4, 5, 1); }
  void rollE() { roll(3, 5, 2); }
  void rollW() { roll(2, 5, 3); }
  void right() { rollright(1, 2, 4, 3); }
  void rollright(int a, int b, int c, int d) {
    temp = dice[a];
    dice[a] = dice[b];
    dice[b] = dice[c];
    dice[c] = dice[d];
    dice[d] = temp;
  }
  // 2->3 3->5 5-4 4-2
  void roll(int a, int b, int c) {
    temp = dice[0];
    dice[0] = dice[a];
    dice[a] = dice[b];
    dice[b] = dice[c];
    dice[c] = temp;
  }
  void fi(char ch) {
    if (ch == 'N') {
      rollN();
    }
    if (ch == 'S') {
      rollS();
    }
    if (ch == 'W') {
      rollW();
    }
    if (ch == 'E') {
      rollE();
    }
  }
  void NE() {
    for (ii = 0; ii < 4; ii++) {
      for (iii = 0; iii < 4; iii++) {
        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollE();
      }
      rollN();
    }
  }
  void NW() {
    for (ii = 0; ii < 4; ii++) {
      // rollN();
      for (ji = 0; ji < 4; ji++) {
        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollW();
      }
      rollN();
    }
  }
  void SE() {
    for (ii = 0; ii < 4; ii++) {
      // rollS();
      for (ji = 0; ji < 4; ji++) {
        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollE();
      }
      rollS();
    }
  }
  void SW() {
    for (ii = 0; ii < 4; ii++) {
      // rollS();

      for (ji = 0; ji < 4; ji++) {
        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollW();
      }
      rollS();
    }
  }
  void EN() {
    for (ii = 0; ii < 4; ii++) {
      for (iii = 0; iii < 4; iii++) {

        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollN();
      }
      rollE();
    }
  }
  void ES() {
    for (ii = 0; ii < 4; ii++) {
      for (iii = 0; iii < 4; iii++) {

        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollS();
      }
      rollE();
    }
  }
  void WN() {
    for (ii = 0; ii < 4; ii++) {
      for (iii = 0; iii < 4; iii++) {

        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollN();
      }
      rollW();
    }
  }
  void WS() {
    for (ii = 0; ii < 4; ii++) {
      for (iii = 0; iii < 4; iii++) {

        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollS();
      }
      rollW();
    }
  }
  void rR() {
    for (ji = 0; ji < 4; ji++) {
      for (ii = 0; ii < 4; ii++) {
        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        right();
      }
      rollN();
    }
  }
};

int main() {
  DICE c;
  c.ansDice3 = 0;
  for (int i = 0; i < 6; i++) {
    cin >> c.dice[i];
  }
  for (int i = 0; i < 6; i++) {
    cin >> c.dice2[i];
  }
  /*
int q,front,up;cin>>q;
  for(int i=0;i<q;i++){

                  c.cpy();

          cin>>up>>front;
          for(int in=0;in<6;in++){
                  if(c.dice[in]==up){
                          c.foo=c.dice[in];
                  }
                  if(c.dice[in]==front){
                          c.fooo=c.dice[in];
                  }
          }
          */

  // c.foo=c.dice[up-1];
  // c.fooo=c.dice[front-1];
  // c.ans=0;
  /*if(c.foo==c.cpyDice[0] && c.fooo==c.cpyDice[1]){
                          c.ans=c.cpyDice[2];
                          cout<<c.ans<<endl;
                  }*/
  while (1) {
    c.rR();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.NE();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.NW();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.SE();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.SW();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.EN();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.ES();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.WN();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.WS();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    cout << "No" << endl;
    break;
  }
  // int aa;cin>>aa;

  return 0;
}

// c.dice[0]==c.dice2[0] && c.dice[1]==c.dice2[1] && c.dice[2]==c.dice2[2] &&
// c.dice[3]==c.dice2[3] && c.dice[4]==c.dice2[4] && c.dice[5]==c.dice2[5]
/*
  N 1->2 2->6 6->5 5->1
  S 1->5 5->6 6->2 2->1
  W 1->3 3->6 6->4 4->1
  E 1->4 4->6 6->3 3->1
  */

Error: TLE

Fixed submission:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class DICE {
private:
  int temp;

public:
  int ii, iii, ji, ij;
  int ans, foo, fooo, ansDice3;
  int dice[6], dice2[6];
  int cpyDice[6], cpyDice2[6];
  void cpy() {
    for (ii = 0; ii < 6; ii++) {
      cpyDice[ii] = dice[ii];
    }
  }
  void rollN() { roll(1, 5, 4); }
  void rollS() { roll(4, 5, 1); }
  void rollE() { roll(3, 5, 2); }
  void rollW() { roll(2, 5, 3); }
  void right() { rollright(1, 2, 4, 3); }
  void rollright(int a, int b, int c, int d) {
    temp = dice[a];
    dice[a] = dice[b];
    dice[b] = dice[c];
    dice[c] = dice[d];
    dice[d] = temp;
  }
  // 2->3 3->5 5-4 4-2
  void roll(int a, int b, int c) {
    temp = dice[0];
    dice[0] = dice[a];
    dice[a] = dice[b];
    dice[b] = dice[c];
    dice[c] = temp;
  }
  void fi(char ch) {
    if (ch == 'N') {
      rollN();
    }
    if (ch == 'S') {
      rollS();
    }
    if (ch == 'W') {
      rollW();
    }
    if (ch == 'E') {
      rollE();
    }
  }
  void NE() {
    for (ii = 0; ii < 4; ii++) {
      for (iii = 0; iii < 4; iii++) {
        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollE();
      }
      rollN();
    }
  }
  void NW() {
    for (ii = 0; ii < 4; ii++) {
      // rollN();
      for (ji = 0; ji < 4; ji++) {
        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollW();
      }
      rollN();
    }
  }
  void SE() {
    for (ii = 0; ii < 4; ii++) {
      // rollS();
      for (ji = 0; ji < 4; ji++) {
        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollE();
      }
      rollS();
    }
  }
  void SW() {
    for (ii = 0; ii < 4; ii++) {
      // rollS();

      for (ji = 0; ji < 4; ji++) {
        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollW();
      }
      rollS();
    }
  }
  void EN() {
    for (ii = 0; ii < 4; ii++) {
      for (iii = 0; iii < 4; iii++) {

        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollN();
      }
      rollE();
    }
  }
  void ES() {
    for (ii = 0; ii < 4; ii++) {
      for (iii = 0; iii < 4; iii++) {

        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollS();
      }
      rollE();
    }
  }
  void WN() {
    for (ii = 0; ii < 4; ii++) {
      for (iii = 0; iii < 4; iii++) {

        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollN();
      }
      rollW();
    }
  }
  void WS() {
    for (ii = 0; ii < 4; ii++) {
      for (iii = 0; iii < 4; iii++) {

        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        rollS();
      }
      rollW();
    }
  }
  void rR() {
    for (ji = 0; ji < 4; ji++) {
      for (ii = 0; ii < 4; ii++) {
        if (foo == dice[0] && fooo == dice[1]) {
          ans = dice[2];
        }
        if (dice[0] == dice2[0] && dice[1] == dice2[1] && dice[2] == dice2[2] &&
            dice[3] == dice2[3] && dice[4] == dice2[4] && dice[5] == dice2[5]) {
          ansDice3 = 1;
        }
        right();
      }
      rollN();
    }
  }
};

int main() {
  DICE c;
  c.ansDice3 = 0;
  for (int i = 0; i < 6; i++) {
    cin >> c.dice[i];
  }
  for (int i = 0; i < 6; i++) {
    cin >> c.dice2[i];
  }

  int q, front, up;
  cin >> q;
  for (int i = 0; i < q; i++) {
    c.cpy();
    cin >> up >> front;
    for (int in = 0; in < 6; in++) {
      if (c.dice[in] == up) {
        c.foo = c.dice[in];
      }
      if (c.dice[in] == front) {
        c.fooo = c.dice[in];
      }
    }

    // c.foo=c.dice[up-1];
    // c.fooo=c.dice[front-1];
    c.ans = 0;
    /*if(c.foo==c.cpyDice[0] && c.fooo==c.cpyDice[1]){
                            c.ans=c.cpyDice[2];
                            cout<<c.ans<<endl;
                    }*/
    // c.rR();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.NE();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.NW();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.SE();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.SW();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.EN();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.ES();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.WN();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    c.WS();
    if (c.ansDice3 != 0) {
      cout << "Yes" << endl;
      break;
    }
    cout << "No" << endl;
  }
  int aa;
  cin >> aa;

  return 0;
}

// c.dice[0]==c.dice2[0] && c.dice[1]==c.dice2[1] && c.dice[2]==c.dice2[2] &&
// c.dice[3]==c.dice2[3] && c.dice[4]==c.dice2[4] && c.dice[5]==c.dice2[5]
/*
  N 1->2 2->6 6->5 5->1
  S 1->5 5->6 6->2 2->1
  W 1->3 3->6 6->4 4->1
  E 1->4 4->6 6->3 3->1
  */