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

#include <cstdio>
#include <cstring>
#include <iostream>

using namespace std;

int main() {
  int i, j, n, w, l;
  char com[15];

  /* dire
    1
   4 2
    3
  */

  while (1) {
    //   cout<<"aa"<<endl;;
    cin >> j >> i;
    if (i == 0 && j == 0) {
      break;
    }

    int dire = 1;
    w = 1;
    l = 1;

    while (1) {

      //  cout<<w<<" "<<l<<" d:"<<dire<<endl;//

      cin >> com;
      // cout<< com<<"  "<< n<< endl;
      if (strcmp(com, "FORWARD") == 0) {
        cin >> n;
        if (dire == 1) {
          l += n;
          if (l > i) {
            l = i;
          }
        }
        if (dire == 2) {
          w += n;
          if (w > j) {
            w = j;
          }
        }
        if (dire == 3) {
          l -= n;
          if (l < 1) {
            l = 1;
          }
        }
        if (dire == 4) {
          w -= n;
          if (w < 1) {
            w = 1;
          }
        }
      } else if (strcmp(com, "BACKWARD") == 0) {
        cin >> n;
        if (dire == 3) {
          l += n;
          if (l > i) {
            l = i;
          }
        }
        if (dire == 4) {
          w += n;
          if (w > j) {
            w = j;
          }
        }
        if (dire == 1) {
          l -= n;
          if (l < 1) {
            l = 1;
          }
        }
        if (dire == 2) {
          w -= n;
          if (w < 1) {
            w = 1;
          }
        }
      } else if (strcmp(com, "STOP") == 0) {
        break;
      } else if (strcmp(com, "RIGHT") == 0) {
        if (dire != 4) {
          dire++;
        } else if (dire == 4) {
          dire = 1;
        } else {
          cout << "???\\n";
        }
      } else if (strcmp(com, "LEFT") == 0) {
        if (dire != 1) {
          dire--;
        } else if (dire == 1) {
          dire = 4;
        } else {
          cout << "???\\n";
        }
      }
    }
    cout << w << " " << l << endl;
  }

  return 0;
}

Error: TLE

Fixed submission:

#include <cstdio>
#include <cstring>
#include <iostream>

using namespace std;

int main() {
  int i, j, n, w, l;
  char com[10], turn[10];

  /* dire
    1
   4 2
    3
  */

  while (1) {
    //   cout<<"aa"<<endl;;
    cin >> j >> i;
    if (i == 0 && j == 0) {
      break;
    }

    int dire = 1;
    w = 1;
    l = 1;

    while (1) {

      // cout<<w<<" "<<l<<" d:"<<dire<<endl;//

      cin >> com >> n;
      // cout<< com<<"  "<< n<< endl;
      if (strcmp(com, "FORWARD") == 0) {
        if (dire == 1) {
          l += n;
          if (l > i) {
            l = i;
          }
        }
        if (dire == 2) {
          w += n;
          if (w > j) {
            w = j;
          }
        }
        if (dire == 3) {
          l -= n;
          if (l < 1) {
            l = 1;
          }
        }
        if (dire == 4) {
          w -= n;
          if (w < 1) {
            w = 1;
          }
        }
      } else if (strcmp(com, "BACKWARD") == 0) {
        if (dire == 3) {
          l += n;
          if (l > i) {
            l = i;
          }
        }
        if (dire == 4) {
          w += n;
          if (w > j) {
            w = j;
          }
        }
        if (dire == 1) {
          l -= n;
          if (l < 1) {
            l = 1;
          }
        }
        if (dire == 2) {
          w -= n;
          if (w < 1) {
            w = 1;
          }
        }
      }

      cin >> turn;
      if (strcmp(turn, "STOP") == 0) {
        break;
      }
      // cout<<turn<<endl;
      if (strcmp(turn, "RIGHT") == 0) {
        if (dire != 4) {
          dire++;
        } else if (dire == 4) {
          dire = 1;
        } else {
          cout << "???\\n";
        }
      }
      if (strcmp(turn, "LEFT") == 0) {
        if (dire != 1) {
          dire--;
        } else if (dire == 1) {
          dire = 4;
        } else {
          cout << "???\\n";
        }
      }
    }
    cout << w << " " << l << endl;
  }

  return 0;
}