Problem p01428 (C++)

Buggy submission (status: Time Limit Exceeded):
#include "bits/stdc++.h"

#define REP(i, n) for (ll i = 0; i < n; ++i)
#define RREP(i, n) for (ll i = n - 1; i >= 0; --i)
#define FOR(i, m, n) for (ll i = m; i < n; ++i)
#define RFOR(i, m, n) for (ll i = n - 1; i >= m; --i)
#define ALL(v) (v).begin(), (v).end()
#define PB(a) push_back(a)
#define UNIQUE(v) v.erase(unique(ALL(v)), v.end());
#define DUMP(v)                                                                \
  REP(i, (v).size()) {                                                         \
    cout << v[i];                                                              \
    if (i != v.size() - 1)                                                     \
      cout << " ";                                                             \
    else                                                                       \
      cout << endl;                                                            \
  }
#define INF 1000000001ll
#define MOD 1000000007ll
#define EPS 1e-9

const int dx[8] = {1, 1, 0, -1, -1, -1, 0, 1};
const int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};

using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
ll max(ll a, int b) { return max(a, ll(b)); }
ll max(int a, ll b) { return max(ll(a), b); }
ll min(ll a, int b) { return min(a, ll(b)); }
ll min(int a, ll b) { return min(ll(a), b); }
///(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)///
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  vector<string> v(8);
  REP(i, 8) cin >> v[i];

  REP(t, INF) {
    int cnt = 0;
    REP(i, 8) REP(j, 8) if (v[i][j] == '.') cnt++;
    if (cnt == 0)
      break;
    int p = -1, q = -1, cmax = -1;
    if (t % 2 == 0) {
      vi m;
      REP(i, 8) {
        REP(j, 8) {
          if (v[i][j] == '.') {
            int c = 0;
            vi s;
            REP(k, 8) {
              int ni = i, nj = j;
              int tmp = 0;

              REP(l, INF) {
                ni += dx[k], nj += dy[k];
                if (ni < 0 || nj < 0 || ni >= 8 || nj >= 8)
                  break;
                if (v[ni][nj] == 'x')
                  tmp++;
                else if (v[ni][nj] == 'o') {
                  if (tmp != 0)
                    s.push_back(k);
                  c += tmp;
                  break;
                } else
                  break;
              }
            }
            if (cmax < c) {
              cmax = c, p = i, q = j;
              m = s;
            }
          }
        }
      }
      if (cmax <= 0)
        continue;
      else {

        v[p][q] = 'o';
        REP(j, m.size()) {
          int ni = p, nj = q;
          REP(i, INF) {
            ni += dx[m[j]], nj += dy[m[j]];
            if (ni >= 0 && nj >= 0 && ni < 8 && nj < 8 && v[ni][nj] == 'x')
              v[ni][nj] = 'o';
            else
              break;
          }
        }
      }
    }

    else {
      vi m;
      REP(i, 8) {
        REP(j, 8) {
          if (v[i][j] == '.') {
            int c = 0;
            vi s;
            REP(k, 8) {
              int ni = i, nj = j;
              int tmp = 0;

              REP(l, INF) {
                ni += dx[k], nj += dy[k];
                if (ni < 0 || nj < 0 || ni >= 8 || nj >= 8)
                  break;
                if (v[ni][nj] == 'o')
                  tmp++;
                else if (v[ni][nj] == 'x') {
                  if (tmp != 0)
                    s.push_back(k);
                  c += tmp;
                  break;
                } else
                  break;
              }
            }
            if (cmax <= c) {
              cmax = c, p = i, q = j;
              m = s;
            }
          }
        }
      }
      if (cmax <= 0)
        continue;
      else {

        v[p][q] = 'x';
        REP(j, m.size()) {
          int ni = p, nj = q;
          REP(i, INF) {
            ni += dx[m[j]], nj += dy[m[j]];
            if (ni >= 0 && nj >= 0 && ni < 8 && nj < 8 && v[ni][nj] == 'o')
              v[ni][nj] = 'x';
            else
              break;
          }
        }
      }
    }
  }
  REP(i, 8) {
    REP(j, 8) { cout << v[i][j]; }
    cout << endl;
  }
  return 0;
}

Fixed submission:
#include "bits/stdc++.h"

#define REP(i, n) for (ll i = 0; i < n; ++i)
#define RREP(i, n) for (ll i = n - 1; i >= 0; --i)
#define FOR(i, m, n) for (ll i = m; i < n; ++i)
#define RFOR(i, m, n) for (ll i = n - 1; i >= m; --i)
#define ALL(v) (v).begin(), (v).end()
#define PB(a) push_back(a)
#define UNIQUE(v) v.erase(unique(ALL(v)), v.end());
#define DUMP(v)                                                                \
  REP(i, (v).size()) {                                                         \
    cout << v[i];                                                              \
    if (i != v.size() - 1)                                                     \
      cout << " ";                                                             \
    else                                                                       \
      cout << endl;                                                            \
  }
#define INF 1000000001ll
#define MOD 1000000007ll
#define EPS 1e-9

const int dx[8] = {1, 1, 0, -1, -1, -1, 0, 1};
const int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};

using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
ll max(ll a, int b) { return max(a, ll(b)); }
ll max(int a, ll b) { return max(ll(a), b); }
ll min(ll a, int b) { return min(a, ll(b)); }
ll min(int a, ll b) { return min(ll(a), b); }
///(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)///
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  vector<string> v(8);
  REP(i, 8) cin >> v[i];

  REP(t, 10000) {
    int p = -1, q = -1, cmax = -1;
    if (t % 2 == 0) {
      vi m;
      REP(i, 8) {
        REP(j, 8) {
          if (v[i][j] == '.') {
            int c = 0;
            vi s;
            REP(k, 8) {
              int ni = i, nj = j;
              int tmp = 0;

              REP(l, INF) {
                ni += dx[k], nj += dy[k];
                if (ni < 0 || nj < 0 || ni >= 8 || nj >= 8)
                  break;
                if (v[ni][nj] == 'x')
                  tmp++;
                else if (v[ni][nj] == 'o') {
                  if (tmp != 0)
                    s.push_back(k);
                  c += tmp;
                  break;
                } else
                  break;
              }
            }
            if (cmax < c) {
              cmax = c, p = i, q = j;
              m = s;
            }
          }
        }
      }
      if (cmax <= 0)
        continue;
      else {

        v[p][q] = 'o';
        REP(j, m.size()) {
          int ni = p, nj = q;
          REP(i, INF) {
            ni += dx[m[j]], nj += dy[m[j]];
            if (ni >= 0 && nj >= 0 && ni < 8 && nj < 8 && v[ni][nj] == 'x')
              v[ni][nj] = 'o';
            else
              break;
          }
        }
      }
    }

    else {
      vi m;
      REP(i, 8) {
        REP(j, 8) {
          if (v[i][j] == '.') {
            int c = 0;
            vi s;
            REP(k, 8) {
              int ni = i, nj = j;
              int tmp = 0;

              REP(l, INF) {
                ni += dx[k], nj += dy[k];
                if (ni < 0 || nj < 0 || ni >= 8 || nj >= 8)
                  break;
                if (v[ni][nj] == 'o')
                  tmp++;
                else if (v[ni][nj] == 'x') {
                  if (tmp != 0)
                    s.push_back(k);
                  c += tmp;
                  break;
                } else
                  break;
              }
            }
            if (cmax <= c) {
              cmax = c, p = i, q = j;
              m = s;
            }
          }
        }
      }
      if (cmax <= 0)
        continue;
      else {

        v[p][q] = 'x';
        REP(j, m.size()) {
          int ni = p, nj = q;
          REP(i, INF) {
            ni += dx[m[j]], nj += dy[m[j]];
            if (ni >= 0 && nj >= 0 && ni < 8 && nj < 8 && v[ni][nj] == 'o')
              v[ni][nj] = 'x';
            else
              break;
          }
        }
      }
    }
  }
  REP(i, 8) {
    REP(j, 8) { cout << v[i][j]; }
    cout << endl;
  }
  return 0;
}