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

#include <algorithm>
#include <iostream>
using namespace std;

int straight(int card[]) {
  for (int i = 1; i < 9; i++) {
    if (((card[0] == i) && (card[1] == i + 1) && (card[2] == i + 2) &&
         (card[3] == i + 3) && (card[4] == i + 4)) ||
        (card[0] == 1 && card[1] == 10 && card[2] == 11 && card[3] == 12 &&
         card[4] == 13))
      return 1;
  }
  return 0;
}

int main() {
  int c[5], n;
  char k;

  while (1) {
    cin >> c[0] >> k >> c[1] >> k >> c[2] >> k >> c[3] >> k >> c[4];
    if (cin.eof())
      break;
    n = 0;
    sort(c, c + 5);

    for (int i = 0; i < 4; i++) {
      for (int j = i + 1; j < 5; j++) {
        if (c[i] == c[j])
          n++;
      }
    }
    switch (n) {
    case 1:
      cout << "one pair\\n";
      break;
    case 2:
      cout << "two pair\\n";
      break;
    case 3:
      cout << "three card\\n";
      break;
    case 4:
      cout << "full house\\n";
      break;
    case 6:
      cout << "four card\\n";
      break;
    case 10:
      cout << "four card\\n";
      break;
    default:
      if (straight(c))
        cout << "straight\\n";
      else
        cout << "null\\n";
      break;
    }
  }

  return 0;
}

Error: TLE

Fixed submission:

#include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;
typedef long long ll;
const double EPS = 1e-9;
typedef vector<int> vint;
typedef pair<int, int> pint;
#define rep(i, n) REP(i, 0, n)
#define ALL(v) v.begin(), v.end()
#define MSG(a) cout << #a << " " << a << endl;
#define REP(i, x, n) for (int i = x; i < n; i++)
template <class T> T RoundOff(T a) { return int(a + .5 - (a < 0)); }
template <class T, class C> void chmax(T &a, C b) {
  if (a < b)
    a = b;
}
template <class T, class C> void chmin(T &a, C b) {
  if (b < a)
    a = b;
}
template <class T, class C> pair<T, C> mp(T a, C b) { return make_pair(a, b); }

int main() {
  while (true) {
    int v[5];
    char k;

    cin >> v[0];
    rep(i, 4) cin >> k >> v[i + 1];

    vint n(13, 0);

    rep(i, 5) n[v[i] - 1]++;

    rep(i, 13) if (4 <= n[i]) {
      cout << "four card" << endl;
      goto ng;
    }

    rep(i, 13) rep(j, 13) if (n[i] == 2 && n[j] == 3) {
      cout << "full house" << endl;
      goto ng;
    }

    rep(i, 10) if (n[i % 13] == 1 && n[(i + 1) % 13] == 1 &&
                   n[(i + 2) % 13] == 1 && n[(i + 3) % 13] == 1 &&
                   n[(i + 4) % 13] == 1) {
      cout << "straight" << endl;
      goto ng;
    }

    rep(i, 13) if (3 <= n[i]) {
      cout << "three card" << endl;
      goto ng;
    }

    rep(i, 13) REP(j, 1, 13) if (n[i] == 2 && n[j] == 2) {
      cout << "two pair" << endl;
      goto ng;
    }

    rep(i, 13) if (n[i] == 2) {
      cout << "one pair" << endl;
      goto ng;
    }

    cout << "null" << endl;

  ng:;
  }
}